mirror of
https://github.com/obsproject/obs-studio.git
synced 2025-12-23 22:48:02 -05:00
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:
committed by
Ryan Foster
parent
2d5ba21204
commit
5984faefe4
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user