@@ -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
602611static 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 ,
0 commit comments