+ 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.transform.field_mode; // Add field to flag.\r
+ kernel_.draw(channel_.ogl(), std::move(item), *local_key_buffer.second, nullptr, nullptr);\r
+ }\r
+ else\r
+ {\r
+ kernel_.draw(channel_.ogl(), std::move(item), draw_buffer, local_key_buffer.second, layer_key_buffer);\r
+ local_key_buffer.first ^= item.transform.field_mode; // Remove field from flag.\r
+ \r
+ if(local_key_buffer.first == 0) // If all fields from key has been used, reset it\r
+ {\r
+ local_key_buffer.first = 0;\r
+ local_key_buffer.second.reset();\r
+ }\r
+ }\r