From 06fe3a65d33c88522556f7a36ac2951d62ddf31e Mon Sep 17 00:00:00 2001 From: Ronag Date: Fri, 19 Aug 2011 15:51:56 +0000 Subject: [PATCH] 2.0. image_mixer: Applied mixing fix for interlacing as well. 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 | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/core/mixer/image/image_mixer.cpp b/core/mixer/image/image_mixer.cpp index f82f60cd4..c01e801b9 100644 --- a/core/mixer/image/image_mixer.cpp +++ b/core/mixer/image/image_mixer.cpp @@ -155,16 +155,19 @@ public: if(has_overlapping_items(layer, layer.front().transform.get_blend_mode())) { auto local_draw_buffer = create_device_buffer(4); - - // First item should just be "copied" to empty framebuffer. - auto item = layer.begin(); - item->transform.set_blend_mode(image_transform::blend_mode::replace); - draw_item(std::move(*item++), local_draw_buffer, local_key_buffer, layer_key_buffer); - for(; item != layer.end(); ++item) + int mode = 0; + BOOST_FOREACH(auto& item, layer) { - item->transform.set_blend_mode(image_transform::blend_mode::normal); // Disable blending, it will be used when merging back into render stack. - draw_item(std::move(*item), local_draw_buffer, local_key_buffer, layer_key_buffer); + if(mode & item.mode) + item.transform.set_blend_mode(image_transform::blend_mode::normal); // Disable blending, it will be used when merging back into render stack. + else + { + item.transform.set_blend_mode(image_transform::blend_mode::replace); // Target field is empty, no blending + mode |= item.mode; + } + + draw_item(std::move(item), local_draw_buffer, local_key_buffer, layer_key_buffer); } kernel_.draw(channel_.ogl(), create_render_item(local_draw_buffer, layer.front().transform.get_blend_mode()), draw_buffer, nullptr, nullptr); -- 2.39.2