Skip to content

Commit 5984fae

Browse files
gxalphaRytoEX
authored andcommitted
mac-syphon: Use opaque effect on non-OpenGL renderer
"DrawOpaque" only exists in the default_rect effect, in the normal cases it's just "Draw" in the opaque default shader.
1 parent 2d5ba21 commit 5984fae

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

plugins/mac-syphon/syphon.m

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
IOSurfaceRef ref;
1616

1717
gs_samplerstate_t *sampler;
18-
gs_effect_t *effect;
18+
gs_effect_t *effect_default;
19+
gs_effect_t *effect_opaque;
1920
gs_vertbuffer_t *vertbuffer;
2021
gs_texture_t *tex;
2122
uint32_t width, height;
@@ -314,13 +315,15 @@ static inline bool init_obs_graphics_objects(syphon_t s)
314315
s->vertbuffer = create_vertbuffer();
315316

316317
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;
318320
} 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);
320323
}
321324
obs_leave_graphics();
322325

323-
return s->sampler != NULL && s->vertbuffer != NULL && s->effect != NULL;
326+
return s->sampler != NULL && s->vertbuffer != NULL && s->effect_default != NULL;
324327
}
325328

326329
static inline bool create_syphon_listeners(syphon_t s)
@@ -647,9 +650,16 @@ static void syphon_video_render(void *data, gs_effect_t *effect)
647650
gs_load_vertexbuffer(s->vertbuffer);
648651
gs_load_indexbuffer(NULL);
649652
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+
}
653663
gs_technique_begin(tech);
654664
gs_technique_begin_pass(tech, 0);
655665

0 commit comments

Comments
 (0)