]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 15 Aug 2011 08:07:05 +0000 (08:07 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 15 Aug 2011 08:07:05 +0000 (08:07 +0000)
core/mixer/image/image_mixer.cpp

index a144b5de9614faf7bca63be480960693d741871f..d68113f64257ab8d962034bda8e8071e54d2e0f0 100644 (file)
@@ -68,16 +68,13 @@ struct image_mixer::implementation : boost::noncopyable
 \r
        std::shared_ptr<device_buffer>                  local_key_buffer_;\r
        std::shared_ptr<device_buffer>                  layer_key_buffer_;\r
-\r
-       std::shared_ptr<host_buffer>                    empty_buffer_;\r
-       \r
+               \r
 public:\r
        implementation(video_channel_context& video_channel) \r
                : channel_(video_channel)\r
                , transform_stack_(1)\r
                , mode_stack_(1, video_mode::progressive)\r
        {\r
-               initialize_buffers();\r
        }\r
 \r
        ~implementation()\r
@@ -87,15 +84,17 @@ public:
 \r
        void initialize_buffers()\r
        {\r
+               write_buffer_.reset();  \r
+               layer_key_buffer_.reset();\r
+               draw_buffer_.reset();   \r
+               local_key_buffer_.reset();\r
+\r
+               channel_.ogl().gc();\r
+\r
                write_buffer_                   = channel_.ogl().create_device_buffer(channel_.get_format_desc().width, channel_.get_format_desc().height, 4);\r
                layer_key_buffer_               = channel_.ogl().create_device_buffer(channel_.get_format_desc().width, channel_.get_format_desc().height, 1);\r
                draw_buffer_                    = channel_.ogl().create_device_buffer(channel_.get_format_desc().width, channel_.get_format_desc().height, 4);\r
                local_key_buffer_               = channel_.ogl().create_device_buffer(channel_.get_format_desc().width, channel_.get_format_desc().height, 1);\r
-\r
-               empty_buffer_                   = channel_.ogl().create_host_buffer(channel_.get_format_desc().size, host_buffer::write_only);\r
-               memset(empty_buffer_->data(), 0, empty_buffer_->size());\r
-\r
-               channel_.ogl().gc();\r
        }\r
 \r
        void begin(core::basic_frame& frame)\r
@@ -138,17 +137,17 @@ public:
        boost::unique_future<safe_ptr<host_buffer>> render()\r
        {               \r
                auto layers = std::move(layers_);\r
-               return channel_.ogl().begin_invoke([=]()mutable{return render(std::move(layers));});\r
+               return channel_.ogl().begin_invoke([=]()mutable\r
+               {\r
+                       return render(std::move(layers));\r
+               });\r
        }\r
        \r
        safe_ptr<host_buffer> render(std::deque<layer>&& layers)\r
        {\r
-               if(layers.empty())\r
-                       return make_safe(empty_buffer_);\r
-\r
-               if(channel_.get_format_desc().width != write_buffer_->width() || channel_.get_format_desc().height != write_buffer_->height())\r
+               if(!write_buffer_ || channel_.get_format_desc().width != write_buffer_->width() || channel_.get_format_desc().height != write_buffer_->height())\r
                        initialize_buffers();\r
-               \r
+                               \r
                channel_.ogl().clear(*layer_key_buffer_);\r
                channel_.ogl().clear(*local_key_buffer_);\r
                channel_.ogl().clear(*draw_buffer_);\r