Skip to content

Commit 4bcd341

Browse files
committed
plugin: Fix rendering with 10+ bit output
Closes #247
1 parent c7410bb commit 4bcd341

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

src/vkcapture.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ static void vkcapture_source_render(void *data, gs_effect_t *effect)
563563
}
564564

565565
const enum gs_color_space color_space = gs_get_color_space();
566-
const char *tech_name = "Draw";
566+
const char *tech_name = "DrawSrgbDecompress";
567567
float multiplier = 1.f;
568568

569569
if (color_space == GS_CS_709_EXTENDED) {
@@ -573,8 +573,15 @@ static void vkcapture_source_render(void *data, gs_effect_t *effect)
573573

574574
effect = obs_get_base_effect(ctx->allow_transparency ? OBS_EFFECT_DEFAULT : OBS_EFFECT_OPAQUE);
575575

576+
const bool linear_srgb = gs_get_linear_srgb();
577+
const bool previous = gs_framebuffer_srgb_enabled();
578+
gs_enable_framebuffer_srgb(linear_srgb);
579+
576580
gs_eparam_t *image = gs_effect_get_param_by_name(effect, "image");
577-
gs_effect_set_texture(image, ctx->texture);
581+
if (linear_srgb)
582+
gs_effect_set_texture_srgb(image, ctx->texture);
583+
else
584+
gs_effect_set_texture(image, ctx->texture);
578585

579586
while (gs_effect_loop(effect, tech_name)) {
580587
gs_effect_set_float(gs_effect_get_param_by_name(effect, "multiplier"), multiplier);
@@ -597,6 +604,8 @@ static void vkcapture_source_render(void *data, gs_effect_t *effect)
597604
cursor_render(ctx);
598605
}
599606
}
607+
608+
gs_enable_framebuffer_srgb(previous);
600609
}
601610

602611
static const char *vkcapture_source_get_name(void *data)
@@ -690,7 +699,7 @@ static struct obs_source_info vkcapture_input = {
690699
.id = "vkcapture-source",
691700
.type = OBS_SOURCE_TYPE_INPUT,
692701
.get_name = vkcapture_source_get_name,
693-
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW | OBS_SOURCE_DO_NOT_DUPLICATE,
702+
.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW | OBS_SOURCE_DO_NOT_DUPLICATE | OBS_SOURCE_SRGB,
694703
.create = vkcapture_source_create,
695704
.destroy = vkcapture_source_destroy,
696705
.update = vkcapture_source_update,

src/xcursor-xcb.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,9 @@ void xcb_xcursor_render(xcb_xcursor_t *data)
9393
if (!data->tex)
9494
return;
9595

96-
const bool linear_srgb = gs_get_linear_srgb();
97-
98-
const bool previous = gs_framebuffer_srgb_enabled();
99-
gs_enable_framebuffer_srgb(linear_srgb);
100-
10196
gs_effect_t *effect = gs_get_effect();
10297
gs_eparam_t *image = gs_effect_get_param_by_name(effect, "image");
103-
if (linear_srgb)
98+
if (gs_get_linear_srgb())
10499
gs_effect_set_texture_srgb(image, data->tex);
105100
else
106101
gs_effect_set_texture(image, data->tex);
@@ -116,8 +111,6 @@ void xcb_xcursor_render(xcb_xcursor_t *data)
116111

117112
gs_enable_color(true, true, true, true);
118113
gs_blend_state_pop();
119-
120-
gs_enable_framebuffer_srgb(previous);
121114
}
122115

123116
void xcb_xcursor_offset(xcb_xcursor_t *data, const int x_org, const int y_org)

0 commit comments

Comments
 (0)