From: Ronag Date: Wed, 24 Aug 2011 18:48:01 +0000 (+0000) Subject: image_mixer: Fixed overlapping_items. X-Git-Tag: 2.0.1~66 X-Git-Url: https://git.sesse.net/?p=casparcg;a=commitdiff_plain;h=8f091990c8e3c1997b4b2d89f97b319cb6ea889d image_mixer: Fixed overlapping_items. git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1277 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- diff --git a/core/mixer/image/image_mixer.cpp b/core/mixer/image/image_mixer.cpp index 2b6769d79..eda73da2f 100644 --- a/core/mixer/image/image_mixer.cpp +++ b/core/mixer/image/image_mixer.cpp @@ -20,16 +20,14 @@ #include "../../stdafx.h" #include "image_mixer.h" -#include "image_kernel.h" +#include "image_kernel.h" +#include "../write_frame.h" #include "../gpu/ogl_device.h" #include "../gpu/host_buffer.h" #include "../gpu/device_buffer.h" -#include "../write_frame.h" - #include "../../video_channel_context.h" -#include #include #include @@ -40,13 +38,9 @@ #include #include -#include -#include #include -#include #include -#include using namespace boost::assign; @@ -82,7 +76,7 @@ private: auto draw_buffer = create_device_buffer(4); BOOST_FOREACH(auto& layer, layers) - draw(std::move(layer), draw_buffer, layer_key_buffer); + draw_layer(std::move(layer), draw_buffer, layer_key_buffer); auto host_buffer = channel_.ogl().create_host_buffer(channel_.get_format_desc().size, host_buffer::read_only); channel_.ogl().attach(*draw_buffer); @@ -95,7 +89,7 @@ private: return host_buffer; } - void draw(layer&& layer, const safe_ptr& draw_buffer, std::shared_ptr& layer_key_buffer) + void draw_layer(layer&& layer, const safe_ptr& draw_buffer, std::shared_ptr& layer_key_buffer) { if(layer.empty()) return; @@ -166,12 +160,12 @@ private: { auto upper_count = boost::range::count_if(layer, [&](const render_item& item) { - return item.transform.field_mode | field_mode::upper; + return !item.transform.is_key && (item.transform.field_mode & field_mode::upper); }); auto lower_count = boost::range::count_if(layer, [&](const render_item& item) { - return item.transform.field_mode | field_mode::lower; + return !item.transform.is_key && (item.transform.field_mode & field_mode::lower); }); return upper_count > 1 || lower_count > 1;