]> git.sesse.net Git - casparcg/commitdiff
[mixer] Merged fixed from 2.0 where contrast adjustment incorrectly worked on premult...
authorHelge Norberg <helge.norberg@svt.se>
Mon, 6 Mar 2017 11:34:16 +0000 (12:34 +0100)
committerHelge Norberg <helge.norberg@svt.se>
Mon, 6 Mar 2017 11:34:16 +0000 (12:34 +0100)
accelerator/ogl/image/blending_glsl.h
accelerator/ogl/image/image_shader.cpp

index 7d82f7c6d383aca7aa7e1f90035f6cb103065b0a..326e6f7153044b4afaaf84e67882ea2a89592107 100644 (file)
@@ -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;
                        }
 
index 3258a45c877fa252977ee7ba4fe817a4418e4518..96753a5a4497ab7ccb6f70f46247fe823bd9a93f 100644 (file)
@@ -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)