mac-syphon: Add "Allow Transparency" property

Transparency is now disabled by default, so that alpha values from
injected back buffers don't propagate to OBS (e.g. Minecraft doesn't
render properly in OBS unless "Allow Transparency" is disabled)
This commit is contained in:
Palana 2014-10-27 00:59:44 +01:00
parent d6b3230dbc
commit 26964634d1
2 changed files with 22 additions and 0 deletions

View File

@ -8,3 +8,4 @@ Crop.origin.x="Crop left"
Crop.origin.y="Crop top"
Crop.size.width="Crop right"
Crop.size.height="Crop bottom"
AllowTransparency="Allow Transparency"

View File

@ -17,6 +17,7 @@ struct syphon {
uint32_t width, height;
bool crop;
CGRect crop_rect;
bool allow_transparency;
obs_source_t *source;
@ -465,6 +466,9 @@ static void *syphon_create_internal(obs_data_t *settings, obs_source_t *source)
load_crop(s, settings);
s->allow_transparency = obs_data_get_bool(settings,
"allow_transparency");
return s;
fail:
@ -836,6 +840,9 @@ static inline obs_properties_t *syphon_properties_internal(syphon_t s)
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
obs_property_set_modified_callback(list, servers_changed);
obs_properties_add_bool(props, "allow_transparency",
obs_module_text("AllowTransparency"));
obs_property_t *launch = obs_properties_add_button(props,
"launch inject", obs_module_text("LaunchSyphonInject"),
launch_syphon_inject);
@ -954,6 +961,12 @@ static void syphon_video_render(void *data, gs_effect_t *effect)
if (!s->tex)
return;
bool disable_blending = !s->allow_transparency;
if (disable_blending) {
gs_enable_blending(false);
gs_enable_color(true, true, true, false);
}
gs_vertexbuffer_flush(s->vertbuffer);
gs_load_vertexbuffer(s->vertbuffer);
gs_load_indexbuffer(NULL);
@ -968,6 +981,11 @@ static void syphon_video_render(void *data, gs_effect_t *effect)
gs_technique_end_pass(tech);
gs_technique_end(tech);
if (disable_blending) {
gs_enable_color(true, true, true, true);
gs_enable_blending(true);
}
}
static uint32_t syphon_get_width(void *data)
@ -1094,6 +1112,9 @@ static inline bool update_syphon(syphon_t s, obs_data_t *settings)
static void syphon_update_internal(syphon_t s, obs_data_t *settings)
{
s->allow_transparency = obs_data_get_bool(settings,
"allow_transparency");
load_crop(s, settings);
update_inject(s, settings);
if (update_syphon(s, settings))