1 #include "../../stdafx.h"
\r
3 #include "ogl_device.h"
\r
6 #include <SFML/Window.hpp>
\r
8 namespace caspar { namespace core {
\r
10 ogl_device::ogl_device()
\r
15 context_.reset(new sf::Context());
\r
16 context_->SetActive(true);
\r
20 safe_ptr<device_buffer> ogl_device::create_device_buffer(size_t width, size_t height, size_t stride)
\r
22 auto pool = &device_pools_[stride][((width << 16) & 0xFFFF0000) | (height & 0x0000FFFF)];
\r
23 std::shared_ptr<device_buffer> buffer;
\r
24 if(!pool->try_pop(buffer))
\r
26 executor_.invoke([&]
\r
28 buffer = std::make_shared<device_buffer>(width, height, stride);
\r
32 return safe_ptr<device_buffer>(buffer.get(), [=](device_buffer*){pool->push(buffer);});
\r
35 safe_ptr<host_buffer> ogl_device::create_host_buffer(size_t size, host_buffer::usage_t usage)
\r
37 auto pool = &host_pools_[usage][size];
\r
38 std::shared_ptr<host_buffer> buffer;
\r
39 if(!pool->try_pop(buffer))
\r
41 executor_.invoke([&]
\r
43 buffer = std::make_shared<host_buffer>(size, usage);
\r
44 if(usage == host_buffer::write_only)
\r
51 return safe_ptr<host_buffer>(buffer.get(), [=](host_buffer*)
\r
53 executor_.begin_invoke([=]
\r
55 if(usage == host_buffer::write_only)
\r