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.
This commit is contained in:
Sebastian Beckmann
2025-10-01 20:06:26 +02:00
committed by Ryan Foster
parent 2d5ba21204
commit 5984faefe4

View File

@@ -15,7 +15,8 @@ struct syphon {
IOSurfaceRef ref;
gs_samplerstate_t *sampler;
gs_effect_t *effect;
gs_effect_t *effect_default;
gs_effect_t *effect_opaque;
gs_vertbuffer_t *vertbuffer;
gs_texture_t *tex;
uint32_t width, height;
@@ -314,13 +315,15 @@ static inline bool init_obs_graphics_objects(syphon_t s)
s->vertbuffer = create_vertbuffer();
if (gs_get_device_type() == GS_DEVICE_OPENGL) {
s->effect = obs_get_base_effect(OBS_EFFECT_DEFAULT_RECT);
s->effect_default = obs_get_base_effect(OBS_EFFECT_DEFAULT_RECT);
s->effect_opaque = NULL;
} else {
s->effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
s->effect_default = obs_get_base_effect(OBS_EFFECT_DEFAULT);
s->effect_opaque = obs_get_base_effect(OBS_EFFECT_OPAQUE);
}
obs_leave_graphics();
return s->sampler != NULL && s->vertbuffer != NULL && s->effect != NULL;
return s->sampler != NULL && s->vertbuffer != NULL && s->effect_default != NULL;
}
static inline bool create_syphon_listeners(syphon_t s)
@@ -647,9 +650,16 @@ static void syphon_video_render(void *data, gs_effect_t *effect)
gs_load_vertexbuffer(s->vertbuffer);
gs_load_indexbuffer(NULL);
gs_load_samplerstate(s->sampler, 0);
const char *tech_name = s->allow_transparency ? "Draw" : "DrawOpaque";
gs_technique_t *tech = gs_effect_get_technique(s->effect, tech_name);
gs_effect_set_texture(gs_effect_get_param_by_name(s->effect, "image"), s->tex);
gs_technique_t *tech;
if (gs_get_device_type() == GS_DEVICE_OPENGL) {
const char *tech_name = s->allow_transparency ? "Draw" : "DrawOpaque";
tech = gs_effect_get_technique(s->effect_default, tech_name);
gs_effect_set_texture(gs_effect_get_param_by_name(s->effect_default, "image"), s->tex);
} else {
gs_effect_t *draw_effect = s->allow_transparency ? s->effect_default : s->effect_opaque;
tech = gs_effect_get_technique(draw_effect, "Draw");
gs_effect_set_texture(gs_effect_get_param_by_name(draw_effect, "image"), s->tex);
}
gs_technique_begin(tech);
gs_technique_begin_pass(tech, 0);