From 0eab6d7ef8ee618924b4aac7c86f6f1b78d19fc5 Mon Sep 17 00:00:00 2001 From: Helge Norberg Date: Mon, 6 Mar 2017 12:34:16 +0100 Subject: [PATCH] [mixer] Merged fixed from 2.0 where contrast adjustment incorrectly worked on premultiplied rgb values instead of straight values --- accelerator/ogl/image/blending_glsl.h | 10 ++++++++-- accelerator/ogl/image/image_shader.cpp | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/accelerator/ogl/image/blending_glsl.h b/accelerator/ogl/image/blending_glsl.h index 7d82f7c6d..326e6f715 100644 --- a/accelerator/ogl/image/blending_glsl.h +++ b/accelerator/ogl/image/blending_glsl.h @@ -30,7 +30,7 @@ static std::string get_adjustement_glsl() ** http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=21057 */ - vec3 ContrastSaturationBrightness(vec3 color, float brt, float sat, float con) + vec3 ContrastSaturationBrightness(vec4 color, float brt, float sat, float con) { const float AvgLumR = 0.5; const float AvgLumG = 0.5; @@ -40,11 +40,17 @@ static std::string get_adjustement_glsl() ? vec3(0.0722, 0.7152, 0.2126) : vec3(0.114, 0.587, 0.299); + if (color.a > 0.0) + color.rgb /= color.a; + vec3 AvgLumin = vec3(AvgLumR, AvgLumG, AvgLumB); - vec3 brtColor = color * brt; + vec3 brtColor = color.rgb * brt; vec3 intensity = vec3(dot(brtColor, LumCoeff)); vec3 satColor = mix(intensity, brtColor, sat); vec3 conColor = mix(AvgLumin, satColor, con); + + conColor.rgb *= color.a; + return conColor; } diff --git a/accelerator/ogl/image/image_shader.cpp b/accelerator/ogl/image/image_shader.cpp index 3258a45c8..96753a5a4 100644 --- a/accelerator/ogl/image/image_shader.cpp +++ b/accelerator/ogl/image/image_shader.cpp @@ -337,7 +337,7 @@ std::string get_fragment(bool blend_modes, bool post_processing) if(levels) color.rgb = LevelsControl(color.rgb, min_input, gamma, max_input, min_output, max_output); if(csb) - color.rgb = ContrastSaturationBrightness(color.rgb, brt, sat, con); + color.rgb = ContrastSaturationBrightness(color, brt, sat, con); if(has_local_key) color *= texture2D(local_key, gl_TexCoord[1].st).r; if(has_layer_key) -- 2.39.2