]> git.sesse.net Git - casparcg/commitdiff
2.0.2: image_mixer: Fixed blending modes. Use straight alpha in calculations.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 9 Nov 2011 14:29:17 +0000 (14:29 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 9 Nov 2011 14:29:17 +0000 (14:29 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1551 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/image/image_shader.cpp

index 6d89630c2c2da0a54a550ac7b2537109d1c1d3ca..f6a81cb8318b2052723c3161691504501a3313de 100644 (file)
@@ -69,16 +69,14 @@ std::string get_blend_color_func()
        "                                                                                                                                                                       \n"                                                                                                                                                       \r
        "vec4 blend(vec4 fore)                                                                                                                          \n"\r
        "{                                                                                                                                                                      \n"\r
-       "   vec4 back = texture2D(background, gl_TexCoord[1].st).bgra;                                          \n"             \r
-       "       fore.rgb = get_blend_color(back.rgb, fore.rgb);                                                                 \n"\r
-       "                                                                                                                                                                       \n"             \r
-       "       switch(keyer)                                                                                                                                   \n"\r
-       "       {                                                                                                                                                               \n"\r
-       "               case 0: return fore + (1.0-fore.a)*back; // linear                                                      \n"\r
-       "               case 1: return fore + back; // additive                                                                         \n"\r
+       "   vec4 back = texture2D(background, gl_TexCoord[1].st).bgra;                                          \n"\r
+       "   if(blend_mode != 0)                                                                                                                         \n"\r
+       "               fore.rgb = get_blend_color(back.rgb/(back.a+0.0000001), fore.rgb/(fore.a+0.0000001))*fore.a;\n"\r
+       "       switch(keyer)                                                                                                                                   \n"     \r
+       "       {                                                                                                                                                               \n"     \r
+       "               case 1:  return fore + back; // additive                                                                        \n"\r
+       "               default: return fore + (1.0-fore.a)*back; // linear                                                     \n"\r
        "       }                                                                                                                                                               \n"\r
-       "                                                                                                                                                                       \n"                                     \r
-       "       return fore + (1.0-fore.a)*back;                                                                                                \n"\r
        "}                                                                                                                                                                      \n";                    \r
 }\r
                \r