From e08ad9faf3425b10939099079970e50ea95616b2 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 19 Jan 2021 10:50:47 -0800 Subject: [PATCH] UI: Render previews in linear sRGB space Necessary for correct alpha blending. --- UI/window-basic-filters.cpp | 4 +++- UI/window-basic-interaction.cpp | 3 +++ UI/window-basic-properties.cpp | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/UI/window-basic-filters.cpp b/UI/window-basic-filters.cpp index d27e59fba..52c2c2876 100644 --- a/UI/window-basic-filters.cpp +++ b/UI/window-basic-filters.cpp @@ -589,11 +589,13 @@ void OBSBasicFilters::DrawPreview(void *data, uint32_t cx, uint32_t cy) gs_viewport_push(); gs_projection_push(); + const bool previous = gs_set_linear_srgb(true); + gs_ortho(0.0f, float(sourceCX), 0.0f, float(sourceCY), -100.0f, 100.0f); gs_set_viewport(x, y, newCX, newCY); - obs_source_video_render(window->source); + gs_set_linear_srgb(previous); gs_projection_pop(); gs_viewport_pop(); } diff --git a/UI/window-basic-interaction.cpp b/UI/window-basic-interaction.cpp index ed3519c86..304fb56c5 100644 --- a/UI/window-basic-interaction.cpp +++ b/UI/window-basic-interaction.cpp @@ -148,10 +148,13 @@ void OBSBasicInteraction::DrawPreview(void *data, uint32_t cx, uint32_t cy) gs_viewport_push(); gs_projection_push(); + const bool previous = gs_set_linear_srgb(true); + gs_ortho(0.0f, float(sourceCX), 0.0f, float(sourceCY), -100.0f, 100.0f); gs_set_viewport(x, y, newCX, newCY); obs_source_video_render(window->source); + gs_set_linear_srgb(previous); gs_projection_pop(); gs_viewport_pop(); } diff --git a/UI/window-basic-properties.cpp b/UI/window-basic-properties.cpp index 52dd19fad..4f149667d 100644 --- a/UI/window-basic-properties.cpp +++ b/UI/window-basic-properties.cpp @@ -392,11 +392,13 @@ void OBSBasicProperties::DrawPreview(void *data, uint32_t cx, uint32_t cy) gs_viewport_push(); gs_projection_push(); + const bool previous = gs_set_linear_srgb(true); + gs_ortho(0.0f, float(sourceCX), 0.0f, float(sourceCY), -100.0f, 100.0f); gs_set_viewport(x, y, newCX, newCY); - obs_source_video_render(window->source); + gs_set_linear_srgb(previous); gs_projection_pop(); gs_viewport_pop(); }