]> git.sesse.net Git - casparcg/blobdiff - core/mixer/image/image_shader.cpp
2.0. image_mixer: Added "keyer" concept.
[casparcg] / core / mixer / image / image_shader.cpp
index 85ceb4cca1ccdd2e7bd1529a7155a6ea74f75dfe..6d89630c2c2da0a54a550ac7b2537109d1c1d3ca 100644 (file)
@@ -69,12 +69,15 @@ 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
-       "                                                                                                                                                                       \n"             \r
-       "       if(blend_mode == 29) // mix                                                                                                             \n"\r
-       "               return fore + back;                                                                                                                     \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
+       "       }                                                                                                                                                               \n"\r
+       "                                                                                                                                                                       \n"                                     \r
        "       return fore + (1.0-fore.a)*back;                                                                                                \n"\r
        "}                                                                                                                                                                      \n";                    \r
 }\r
@@ -119,7 +122,7 @@ std::string get_fragment(bool blend_modes)
        "uniform bool           has_local_key;                                                                                                  \n"\r
        "uniform bool           has_layer_key;                                                                                                  \n"\r
        "uniform int            blend_mode;                                                                                                             \n"\r
-       "uniform int            alpha_mode;                                                                                                             \n"\r
+       "uniform int            keyer;                                                                                                                  \n"\r
        "uniform int            pixel_format;                                                                                                   \n"\r
        "                                                                                                                                                                       \n"\r
        "uniform float          opacity;                                                                                                                \n"\r