- std::vector<safe_ptr<host_buffer>> buffers_;\r
- std::vector<short> audio_data_;\r
- const core::pixel_format_desc desc_;\r
- int tag_;\r
-\r
-public:\r
- implementation(int tag, const core::pixel_format_desc& desc, const std::vector<safe_ptr<host_buffer>>& buffers) \r
- : desc_(desc)\r
- , buffers_(buffers)\r
- , tag_(tag){}\r
- \r
+ ogl_device* ogl_;\r
+ std::vector<std::shared_ptr<host_buffer>> buffers_;\r
+ std::vector<safe_ptr<device_buffer>> textures_;\r
+ std::vector<int16_t> audio_data_;\r
+ const core::pixel_format_desc desc_;\r
+ const void* tag_;\r
+ core::field_mode::type mode_;\r
+\r
+ implementation(const void* tag)\r
+ : tag_(tag)\r
+ {\r
+ }\r
+\r
+ implementation(ogl_device& ogl, const void* tag, const core::pixel_format_desc& desc) \r
+ : ogl_(&ogl)\r
+ , desc_(desc)\r
+ , tag_(tag)\r
+ , mode_(core::field_mode::progressive)\r
+ {\r
+ ogl_->invoke([&]\r
+ {\r
+ std::transform(desc.planes.begin(), desc.planes.end(), std::back_inserter(buffers_), [&](const core::pixel_format_desc::plane& plane)\r
+ {\r
+ return ogl_->create_host_buffer(plane.size, host_buffer::write_only);\r
+ });\r
+ std::transform(desc.planes.begin(), desc.planes.end(), std::back_inserter(textures_), [&](const core::pixel_format_desc::plane& plane)\r
+ {\r
+ return ogl_->create_device_buffer(plane.width, plane.height, plane.channels); \r
+ });\r
+ }, high_priority);\r
+ }\r
+ \r