]> git.sesse.net Git - casparcg/blobdiff - core/mixer/image/image_kernel.cpp
2.0. image_mixer: - Renderer is now properly and fully pre-multiplied. - Removed...
[casparcg] / core / mixer / image / image_kernel.cpp
index bd75820e058b4d51ccf19540ed62e6f5af763d27..4db822a480045a0e2ba9cde4480f178341d5a1fc 100644 (file)
@@ -111,6 +111,7 @@ struct image_kernel::implementation : boost::noncopyable
                shader_->set("has_local_key",   local_key);\r
                shader_->set("has_layer_key",   layer_key);\r
                shader_->set("pixel_format",    item.pix_desc.pix_fmt); \r
+               shader_->set("opacity",                 item.transform.get_opacity());  \r
                \r
                // Setup blend_func\r
                \r
@@ -126,15 +127,16 @@ struct image_kernel::implementation : boost::noncopyable
                        switch(item.transform.get_blend_mode())\r
                        {\r
                        case image_transform::blend_mode::add:                  \r
-                               ogl.blend_func_separate(GL_ONE, GL_ONE, GL_ONE, GL_ONE);\r
+                               ogl.blend_func_separate(GL_ONE, GL_ONE, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);\r
                                break;\r
                        case image_transform::blend_mode::replace:                      \r
                                ogl.blend_func_separate(GL_ONE, GL_ZERO, GL_ONE, GL_ONE);\r
                                break;\r
                        case image_transform::blend_mode::screen:\r
-                               ogl.blend_func_separate(GL_ONE, GL_ONE_MINUS_SRC_COLOR, GL_ONE, GL_ONE);\r
+                               ogl.blend_func_separate(GL_ONE, GL_ONE_MINUS_SRC_COLOR, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);\r
+                       case image_transform::blend_mode::normal:\r
                        default:\r
-                               ogl.blend_func_separate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);\r
+                               ogl.blend_func_separate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);\r
                                break;\r
                        }\r
                }\r
@@ -190,7 +192,7 @@ struct image_kernel::implementation : boost::noncopyable
                \r
                ogl.viewport(0, 0, background->width(), background->height());\r
 \r
-               GL(glColor4d(item.transform.get_gain(), item.transform.get_gain(), item.transform.get_gain(), item.transform.get_is_key() ? 1.0 : item.transform.get_opacity()));\r
+               GL(glColor4d(item.transform.get_gain(), item.transform.get_gain(), item.transform.get_gain(), item.transform.get_opacity()));\r
                                                \r
                auto m_p = item.transform.get_clip_translation();\r
                auto m_s = item.transform.get_clip_scale();\r