]> git.sesse.net Git - casparcg/commitdiff
straighten alpha before applying contrast-saturation-brightness when contrast is...
authorHelge Norberg <helge.norberg@gmail.com>
Tue, 4 Jun 2013 15:26:44 +0000 (17:26 +0200)
committerHelge Norberg <helge.norberg@gmail.com>
Tue, 4 Jun 2013 15:26:44 +0000 (17:26 +0200)
#140

CHANGES.txt
core/mixer/image/shader/blending_glsl.h
core/mixer/image/shader/image_shader.cpp

index 7fa1e5f96b8cbbad9d55f9a4c95d8d6643e6c7ea..abffccb76a348817a89bdaf1003fb80a3c4b756a 100644 (file)
@@ -33,6 +33,7 @@ Video mixer
 -----------\r
 \r
   o Added support for chroma keying.\r
+  o Fixed bug where MIXER CONTRAST set to < 1 can cause transparency issues.\r
 \r
 Consumers\r
 ---------\r
@@ -106,6 +107,7 @@ OSC
     + flash producer     /buffer           [buffered]        [buffer size]\r
     + image producer     /file/path        [file path]\r
 \r
+\r
 CasparCG 2.0.3 Stable (w.r.t 2.0.3 Alpha)\r
 =========================================\r
 \r
index bba4e44a29e8450d24ab68ab51b4e840c1757cd8..18aeffa7358b14beb9ad3305e5160b5bd0eee2de 100644 (file)
@@ -30,19 +30,27 @@ static std::string get_adjustement_glsl()
                "\n     ** http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=21057                                                                                                                                                                                                                                                                                                 "\r
                "\n     */                                                                                                                                                                                                                                                                                                                                                                                                                                 "\r
                "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
-               "\n     vec3 ContrastSaturationBrightness(vec3 color, float brt, float sat, float con)                                                                                                                                                                                                                                                                     "\r
+               "\n     vec3 ContrastSaturationBrightness(vec4 color, float brt, float sat, float con)                                                                                                                                                                                                                                                                     "\r
                "\n     {                                                                                                                                                                                                                                                                                                                                                                                                                                  "\r
                "\n             const float AvgLumR = 0.5;                                                                                                                                                                                                                                                                                                                                                                         "\r
                "\n             const float AvgLumG = 0.5;                                                                                                                                                                                                                                                                                                                                                                         "\r
                "\n             const float AvgLumB = 0.5;                                                                                                                                                                                                                                                                                                                                                                         "\r
                "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
                "\n             const vec3 LumCoeff = vec3(0.2125, 0.7154, 0.0721);                                                                                                                                                                                                                                                                                                                        "\r
+               "\n             bool demultiply_remultiply = con < 1.0;                                                                                                                                                                                                                                                                                                                                                                                                            "\r
+               "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
+               "\n             if (demultiply_remultiply && color.a > 0.0)                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
+               "\n                     color.rgb /= color.a;                                                                                                                                                                                                                                                                                                                                                                                                              "\r
                "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
                "\n             vec3 AvgLumin = vec3(AvgLumR, AvgLumG, AvgLumB);                                                                                                                                                                                                                                                                                                                           "\r
-               "\n             vec3 brtColor = color * brt;                                                                                                                                                                                                                                                                                                                                                               "\r
+               "\n             vec3 brtColor = color.rgb * brt;                                                                                                                                                                                                                                                                                                                                                                   "\r
                "\n             vec3 intensity = vec3(dot(brtColor, LumCoeff));                                                                                                                                                                                                                                                                                                                            "\r
                "\n             vec3 satColor = mix(intensity, brtColor, sat);                                                                                                                                                                                                                                                                                                                             "\r
                "\n             vec3 conColor = mix(AvgLumin, satColor, con);                                                                                                                                                                                                                                                                                                                              "\r
+               "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
+               "\n             if (demultiply_remultiply)                                                                                                                                                                                                                                                                                                                                 "\r
+               "\n                     conColor.rgb *= color.a;                                                                                                                                                                                                                                                                                                                                                                                                           "\r
+               "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
                "\n             return conColor;                                                                                                                                                                                                                                                                                                                                                                                           "\r
                "\n     }                                                                                                                                                                                                                                                                                                                                                                                                                                       "\r
                "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
index 2a32bd34fffd052187e74de8f8f4486af354ccee..5c0254258d9396c8eb0ca456fe71823a7a6d8736 100644 (file)
@@ -264,7 +264,7 @@ std::string get_fragment(bool blend_modes)
        "   if(levels)                                                                                                                                          \n"\r
        "               color.rgb = LevelsControl(color.rgb, min_input, max_input, gamma, min_output, max_output); \n"\r
        "       if(csb)                                                                                                                                                 \n"\r
-       "               color.rgb = ContrastSaturationBrightness(color.rgb, brt, sat, con);                     \n"\r
+       "               color.rgb = ContrastSaturationBrightness(color, brt, sat, con);         \n"\r
        "       if(has_local_key)                                                                                                                               \n"\r
        "               color *= texture2D(local_key, gl_TexCoord[1].st).r;                                                     \n"\r
        "       if(has_layer_key)                                                                                                                               \n"\r