, pattern_(nullptr)\r
, attached_texture_(0)\r
, active_shader_(0)\r
+ , read_buffer_(0)\r
{\r
CASPAR_LOG(info) << L"Initializing OpenGL Device.";\r
\r
\r
GL(glGenFramebuffers(1, &fbo_)); \r
GL(glBindFramebuffer(GL_FRAMEBUFFER_EXT, fbo_));\r
- GL(glReadBuffer(GL_COLOR_ATTACHMENT0_EXT));\r
//GL(glDisable(GL_MULTISAMPLE_ARB));\r
\r
CASPAR_LOG(info) << L"Successfully initialized OpenGL Device.";\r
GL(glClear(GL_COLOR_BUFFER_BIT));\r
}\r
\r
+void ogl_device::read_buffer(device_buffer&)\r
+{\r
+ if(read_buffer_ != GL_COLOR_ATTACHMENT0_EXT)\r
+ {\r
+ GL(glReadBuffer(GL_COLOR_ATTACHMENT0_EXT));\r
+ read_buffer_ = GL_COLOR_ATTACHMENT0_EXT;\r
+ }\r
+}\r
+\r
void ogl_device::use(shader& shader)\r
{\r
if(active_shader_ != shader.id())\r
GLint active_shader_;\r
std::array<GLint, 16> binded_textures_;\r
std::array<GLint, 4> blend_func_;\r
+ GLenum read_buffer_;\r
\r
std::unique_ptr<sf::Context> context_;\r
\r
\r
void use(shader& shader);\r
\r
+ void read_buffer(device_buffer& texture);\r
+\r
void flush();\r
\r
// thread-afe\r
\r
auto host_buffer = ogl_->create_host_buffer(format_desc.size, host_buffer::read_only);\r
ogl_->attach(*draw_buffer);\r
+ ogl_->read_buffer(*draw_buffer);\r
host_buffer->begin_read(draw_buffer->width(), draw_buffer->height(), format(draw_buffer->stride()));\r
\r
transferring_buffer_ = std::move(draw_buffer);\r