]> git.sesse.net Git - casparcg/commitdiff
2.0. image_mixer: Reduce memory requirement by deferring host allocation until its...
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 7 Aug 2011 17:13:25 +0000 (17:13 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 7 Aug 2011 17:13:25 +0000 (17:13 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1079 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/image/image_mixer.cpp

index 95130999120835fcfe5ca5fde6017ebf1e77fb13..ace374bab6968e7f0dcc605f1c48378d2c6d5203 100644 (file)
@@ -138,38 +138,36 @@ public:
        {\r
                if(channel_.get_format_desc().width != write_buffer_->width() || channel_.get_format_desc().height != write_buffer_->height())\r
                        initialize_buffers();\r
-\r
-               auto read_buffer = channel_.ogl().create_host_buffer(channel_.get_format_desc().size, host_buffer::read_only);\r
-\r
+               \r
                layer_key_buffer_->clear();\r
                draw_buffer_[0]->clear();\r
                draw_buffer_[1]->clear();\r
                local_key_buffer_[0]->clear();\r
                local_key_buffer_[1]->clear();\r
 \r
-               bool local_key = false;\r
                bool layer_key = false;\r
 \r
                BOOST_FOREACH(auto& layer, layers)\r
-                       draw(std::move(layer), local_key, layer_key);\r
+                       draw(std::move(layer), layer_key);\r
 \r
                std::swap(draw_buffer_[0], write_buffer_);\r
-\r
-               // device -> host.                      \r
-               read_buffer->begin_read(*write_buffer_);\r
-\r
-               return read_buffer;\r
+               \r
+               auto host_buffer = channel_.ogl().create_host_buffer(channel_.get_format_desc().size, host_buffer::read_only);\r
+               host_buffer->begin_read(*write_buffer_);\r
+               return host_buffer;\r
        }\r
 \r
-       void draw(layer&& layer, bool& local_key, bool& layer_key)\r
+       void draw(layer&& layer, bool& layer_key)\r
        {                       \r
+               bool local_key = false;\r
+\r
                local_key_buffer_[0]->clear();\r
 \r
                BOOST_FOREACH(auto& item, layer)\r
                        draw(std::move(item), local_key, layer_key);\r
                \r
                layer_key = local_key;\r
-               local_key = false;\r
+\r
                std::swap(local_key_buffer_[0], layer_key_buffer_);\r
        }\r
 \r