]> git.sesse.net Git - casparcg/commitdiff
Tweaked ogl_device initialization. On some systems, sometimes it would deadlock durin...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 8 Dec 2011 22:30:31 +0000 (22:30 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 8 Dec 2011 22:30:31 +0000 (22:30 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@1841 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/gpu/ogl_device.cpp
core/mixer/gpu/ogl_device.h
core/mixer/image/image_mixer.cpp

index 4c7f32e3c4579a859ffaa1513285354bb0e71caa..4c604132614867a2d985e1847634d3e7c1c24e18 100644 (file)
@@ -42,6 +42,7 @@ ogl_device::ogl_device()
        , 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
@@ -67,7 +68,6 @@ ogl_device::ogl_device()
 \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
@@ -348,6 +348,15 @@ void ogl_device::clear(device_buffer& texture)
        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
index 4461d9086327899ae853c0868621b81361206f25..28b9f5b79a500f2e9a41a97dbbfc3d11979b8ab1 100644 (file)
@@ -68,6 +68,7 @@ class ogl_device : public std::enable_shared_from_this<ogl_device>, boost::nonco
        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
@@ -98,6 +99,8 @@ public:
        \r
        void use(shader& shader);\r
 \r
+       void read_buffer(device_buffer& texture);\r
+\r
        void flush();\r
 \r
        // thread-afe\r
index 7cb74b285c437e9039cbfefb9d441cd9bab7df7e..339986f5780e65bf267dfb49857d93786a707eb1 100644 (file)
@@ -111,6 +111,7 @@ private:
 \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