|
15 | 15 | IOSurfaceRef ref; |
16 | 16 |
|
17 | 17 | gs_samplerstate_t *sampler; |
18 | | - gs_effect_t *effect; |
| 18 | + gs_effect_t *effect_default; |
| 19 | + gs_effect_t *effect_opaque; |
19 | 20 | gs_vertbuffer_t *vertbuffer; |
20 | 21 | gs_texture_t *tex; |
21 | 22 | uint32_t width, height; |
@@ -314,13 +315,15 @@ static inline bool init_obs_graphics_objects(syphon_t s) |
314 | 315 | s->vertbuffer = create_vertbuffer(); |
315 | 316 |
|
316 | 317 | if (gs_get_device_type() == GS_DEVICE_OPENGL) { |
317 | | - s->effect = obs_get_base_effect(OBS_EFFECT_DEFAULT_RECT); |
| 318 | + s->effect_default = obs_get_base_effect(OBS_EFFECT_DEFAULT_RECT); |
| 319 | + s->effect_opaque = NULL; |
318 | 320 | } else { |
319 | | - s->effect = obs_get_base_effect(OBS_EFFECT_DEFAULT); |
| 321 | + s->effect_default = obs_get_base_effect(OBS_EFFECT_DEFAULT); |
| 322 | + s->effect_opaque = obs_get_base_effect(OBS_EFFECT_OPAQUE); |
320 | 323 | } |
321 | 324 | obs_leave_graphics(); |
322 | 325 |
|
323 | | - return s->sampler != NULL && s->vertbuffer != NULL && s->effect != NULL; |
| 326 | + return s->sampler != NULL && s->vertbuffer != NULL && s->effect_default != NULL; |
324 | 327 | } |
325 | 328 |
|
326 | 329 | static inline bool create_syphon_listeners(syphon_t s) |
@@ -647,9 +650,16 @@ static void syphon_video_render(void *data, gs_effect_t *effect) |
647 | 650 | gs_load_vertexbuffer(s->vertbuffer); |
648 | 651 | gs_load_indexbuffer(NULL); |
649 | 652 | gs_load_samplerstate(s->sampler, 0); |
650 | | - const char *tech_name = s->allow_transparency ? "Draw" : "DrawOpaque"; |
651 | | - gs_technique_t *tech = gs_effect_get_technique(s->effect, tech_name); |
652 | | - gs_effect_set_texture(gs_effect_get_param_by_name(s->effect, "image"), s->tex); |
| 653 | + gs_technique_t *tech; |
| 654 | + if (gs_get_device_type() == GS_DEVICE_OPENGL) { |
| 655 | + const char *tech_name = s->allow_transparency ? "Draw" : "DrawOpaque"; |
| 656 | + tech = gs_effect_get_technique(s->effect_default, tech_name); |
| 657 | + gs_effect_set_texture(gs_effect_get_param_by_name(s->effect_default, "image"), s->tex); |
| 658 | + } else { |
| 659 | + gs_effect_t *draw_effect = s->allow_transparency ? s->effect_default : s->effect_opaque; |
| 660 | + tech = gs_effect_get_technique(draw_effect, "Draw"); |
| 661 | + gs_effect_set_texture(gs_effect_get_param_by_name(draw_effect, "image"), s->tex); |
| 662 | + } |
653 | 663 | gs_technique_begin(tech); |
654 | 664 | gs_technique_begin_pass(tech, 0); |
655 | 665 |
|
|
0 commit comments