\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
\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
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