]> git.sesse.net Git - casparcg/commitdiff
2.0. image_mixer: Applied mixing fix for interlacing as well.
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 19 Aug 2011 15:51:56 +0000 (15:51 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 19 Aug 2011 15:51:56 +0000 (15:51 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1235 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/image/image_mixer.cpp

index f82f60cd489d3db118bc6af27708833fa24f261a..c01e801b9833f1a022ad2869bdb5fa5900715b9a 100644 (file)
@@ -155,16 +155,19 @@ public:
                if(has_overlapping_items(layer, layer.front().transform.get_blend_mode()))\r
                {\r
                        auto local_draw_buffer = create_device_buffer(4);       \r
-                       \r
-                       // First item should just be "copied" to empty framebuffer.\r
-                       auto item = layer.begin();\r
-                       item->transform.set_blend_mode(image_transform::blend_mode::replace);\r
-                       draw_item(std::move(*item++), local_draw_buffer, local_key_buffer, layer_key_buffer);           \r
 \r
-                       for(; item != layer.end(); ++item)\r
+                       int mode = 0;\r
+                       BOOST_FOREACH(auto& item, layer)\r
                        {\r
-                               item->transform.set_blend_mode(image_transform::blend_mode::normal); // Disable blending, it will be used when merging back into render stack.\r
-                               draw_item(std::move(*item), local_draw_buffer, local_key_buffer, layer_key_buffer);             \r
+                               if(mode & item.mode)\r
+                                       item.transform.set_blend_mode(image_transform::blend_mode::normal); // Disable blending, it will be used when merging back into render stack.\r
+                               else\r
+                               {\r
+                                       item.transform.set_blend_mode(image_transform::blend_mode::replace); // Target field is empty, no blending\r
+                                       mode |= item.mode;\r
+                               }\r
+\r
+                               draw_item(std::move(item), local_draw_buffer, local_key_buffer, layer_key_buffer);              \r
                        }\r
 \r
                        kernel_.draw(channel_.ogl(), create_render_item(local_draw_buffer, layer.front().transform.get_blend_mode()), draw_buffer, nullptr, nullptr);\r