- if(!local_key_buffer.second)\r
- {\r
- local_key_buffer.first = 0;\r
- local_key_buffer.second = create_device_buffer(1);\r
- }\r
- \r
- local_key_buffer.first |= item.mode;\r
- kernel_.draw(channel_.ogl(), std::move(item), make_safe(local_key_buffer.second), nullptr, nullptr);\r
+ local_key_buffer = local_key_buffer ? local_key_buffer : create_mixer_buffer(1);\r
+\r
+ draw_params.background = local_key_buffer;\r
+ draw_params.local_key = nullptr;\r
+ draw_params.layer_key = nullptr;\r
+\r
+ kernel_.draw(ogl_, std::move(draw_params));\r
+ }\r
+ else if(item.transform.is_mix)\r
+ {\r
+ local_mix_buffer = local_mix_buffer ? local_mix_buffer : create_mixer_buffer(4);\r
+\r
+ draw_params.background = local_mix_buffer;\r
+ draw_params.local_key = std::move(local_key_buffer);\r
+ draw_params.layer_key = layer_key_buffer;\r
+\r
+ draw_params.keyer = keyer::additive;\r
+\r
+ kernel_.draw(ogl_, std::move(draw_params));\r