]> git.sesse.net Git - casparcg/commitdiff
Fixed performance problem in shader
authorHelge Norberg <helge.norberg@gmail.com>
Wed, 4 Sep 2013 09:19:39 +0000 (11:19 +0200)
committerHelge Norberg <helge.norberg@gmail.com>
Wed, 4 Sep 2013 09:19:39 +0000 (11:19 +0200)
core/mixer/image/shader/blending_glsl.h
core/mixer/image/shader/image_shader.cpp

index bda7fbf55e71bdba890dc340377410df8cb25c7d..2d431bdf07ad58ed9881d33f6b9e5fa4b37364a6 100644 (file)
@@ -37,10 +37,10 @@ static std::string get_adjustement_glsl()
                "\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 && color.a != 1.0;                                                                                                                                                                                                                                                                                                                                                                                                                  "\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             if (demultiply_remultiply                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
+               "\n                     color.rgb /= color.a + 0.0000001;                                                                                                                                                                                                                                                                                                                                                                                                                  "\r
                "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
                "\n             vec3 AvgLumin = vec3(AvgLumR, AvgLumG, AvgLumB);                                                                                                                                                                                                                                                                                                                           "\r
                "\n             vec3 brtColor = color.rgb * brt;                                                                                                                                                                                                                                                                                                                                                                   "\r
@@ -49,7 +49,7 @@ static std::string get_adjustement_glsl()
                "\n             vec3 conColor = mix(AvgLumin, satColor, con);                                                                                                                                                                                                                                                                                                                              "\r
                "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
                "\n             if (demultiply_remultiply)                                                                                                                                                                                                                                                                                                                                 "\r
-               "\n                     conColor.rgb *= color.a;                                                                                                                                                                                                                                                                                                                                                                                                           "\r
+               "\n                     conColor.rgb *= color.a + 0.0000001;                                                                                                                                                                                                                                                                                                                                                                                                       "\r
                "\n                                                                                                                                                                                                                                                                                                                                                                                                                                        "\r
                "\n             return conColor;                                                                                                                                                                                                                                                                                                                                                                                           "\r
                "\n     }                                                                                                                                                                                                                                                                                                                                                                                                                                       "\r
index 0ccadd5e937a1f03f0c5800dbe4ca3b447df8e9b..719b5d16ceec7df8cc6ea9838dc81ed7efc35799 100644 (file)
@@ -264,8 +264,8 @@ std::string get_fragment(bool blend_modes)
        "{                                                                                                                                                                      \n"\r
        "       vec4 color = texture2D(background, gl_TexCoord[0].st).bgra;                                             \n"\r
        "                                                                                                                                                                       \n"\r
-       "       if (straighten_alpha && color.a > 0.0 && color.a != 1.0)                                                \n"\r
-       "               color.rgb /= color.a;                                                                                                           \n"\r
+       "       if (straighten_alpha)                                                                                                                   \n"\r
+       "               color.rgb /= color.a + 0.0000001;                                                                                       \n"\r
        "                                                                                                                                                                       \n"\r
        "       return color;                                                                                                                                   \n"\r
        "}                                                                                                                                                                      \n"\r
@@ -275,22 +275,24 @@ std::string get_fragment(bool blend_modes)
        "       if (post_processing)                                                                                                                    \n"\r
        "       {                                                                                                                                                               \n"\r
        "               gl_FragColor = post_process().bgra;                                                                                     \n"\r
-       "               return;                                                                                                                                         \n"\r
        "       }                                                                                                                                                               \n"\r
-       "                                                                                                                                                                       \n"\r
-       "       vec4 color = get_rgba_color();                                                                                                  \n"\r
-       "   color = chroma_key(color);                                                      \n"\r
-       "   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, 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
-       "               color *= texture2D(layer_key, gl_TexCoord[1].st).r;                                                     \n"\r
-       "       color *= opacity;                                                                                                                               \n"\r
-       "       color = blend(color);                                                                                                                   \n"\r
-       "       gl_FragColor = color.bgra;                                                                                                              \n"\r
+       "       else                                                                                                                                                    \n"\r
+       "       {                                                                                                                                                               \n"\r
+       "               vec4 color = get_rgba_color();                                                                                          \n"\r
+       "               color = chroma_key(color);                                                                                                      \n"\r
+       "               if(levels)                                                                                                                                      \n"\r
+       "                       color.rgb = LevelsControl(                                                                                              \n"\r
+       "                                       color.rgb, min_input, max_input, gamma, min_output, max_output);\n"\r
+       "               if(csb)                                                                                                                                         \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
+       "                       color *= texture2D(layer_key, gl_TexCoord[1].st).r;                                             \n"\r
+       "               color *= opacity;                                                                                                                       \n"\r
+       "               color = blend(color);                                                                                                           \n"\r
+       "               gl_FragColor = color.bgra;                                                                                                      \n"\r
+       "       }                                                                                                                                                               \n"\r
        "}                                                                                                                                                                      \n";\r
 }\r
 \r