- //if(item.transform.get_is_atomic()) // layers need to be atomic in-order to support blend-modes properly\r
- //{\r
- // if(!atomic_draw_buffer)\r
- // {\r
- // atomic_draw_buffer = channel_.ogl().create_device_buffer(channel_.get_format_desc().width, channel_.get_format_desc().height, 4); \r
- // channel_.ogl().clear(*atomic_draw_buffer);\r
- // }\r
-\r
- // draw(std::move(item), atomic_draw_buffer, atomic_local_key_buffer, nullptr);\r
- //}\r
- //else\r
- //{\r
- // if(atomic_draw_buffer)\r
- // {\r
- // pixel_format_desc desc;\r
- // desc.pix_fmt = pixel_format::bgra;\r
- // desc.planes.push_back(pixel_format_desc::plane(channel_.get_format_desc().width, channel_.get_format_desc().height, 4));\r
-\r
- // std::vector<safe_ptr<device_buffer>> textures;\r
- // textures.push_back(make_safe(atomic_draw_buffer));\r
- // \r
- // atomic_draw_buffer.reset();\r
- // atomic_local_key_buffer.reset();\r
- // \r
- // render_item atomic_item(desc, std::move(textures), image_transform(), video_mode::progressive, nullptr);\r
- // draw(std::move(atomic_item), draw_buffer_, local_key_buffer, layer_key_buffer);\r
- // }\r
-\r
- // draw(std::move(item), draw_buffer_, local_key_buffer, layer_key_buffer);\r
- //}\r
-\r
- draw(std::move(item), local_key_buffer, layer_key_buffer);\r
+ auto local_draw_buffer = channel_.ogl().create_device_buffer(channel_.get_format_desc().width, channel_.get_format_desc().height, 4); \r
+ channel_.ogl().clear(*local_draw_buffer);\r
+\r
+ BOOST_FOREACH(auto& item, layer) \r
+ draw_item(std::move(item), local_draw_buffer, local_key_buffer, layer_key_buffer); \r
+ \r
+ kernel_.draw(channel_.ogl(), create_render_item(local_draw_buffer, layer.front().transform.get_blend_mode()), make_safe(draw_buffer_), nullptr, nullptr);\r