]> git.sesse.net Git - casparcg/commitdiff
ogl_consumer: Added optional vsync.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 3 Feb 2012 20:04:56 +0000 (20:04 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 3 Feb 2012 20:04:56 +0000 (20:04 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@2226 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ogl/consumer/ogl_consumer.cpp

index 7d0acb226235b3a9a8abd3daf34ac7585558ffa5..5df835f77c47b44e399473d94097220719fd4d3d 100644 (file)
@@ -68,6 +68,8 @@ extern "C"
 #pragma warning (pop)\r
 #endif\r
 \r
+typedef int (*PFNWGLEXTGETSWAPINTERVALPROC) (void);\r
\r
 namespace caspar { namespace ogl {\r
                \r
 enum stretch\r
@@ -94,6 +96,7 @@ struct configuration
        bool                    auto_deinterlace;\r
        bool                    key_only;\r
        aspect_ratio    aspect; \r
+       bool                    vsync;\r
 \r
        configuration()\r
                : name(L"ogl")\r
@@ -103,6 +106,7 @@ struct configuration
                , auto_deinterlace(true)\r
                , key_only(false)\r
                , aspect(aspect_invalid)\r
+               , vsync(false)\r
        {\r
        }\r
 };\r
@@ -186,7 +190,7 @@ public:
                screen_y_               = devmode.dmPosition.y;\r
                screen_width_   = config_.windowed ? square_width_ : devmode.dmPelsWidth;\r
                screen_height_  = config_.windowed ? square_height_ : devmode.dmPelsHeight;\r
-               \r
+\r
                is_running_ = true;\r
                thread_ = boost::thread([this]{run();});\r
        }\r
@@ -232,6 +236,18 @@ public:
                glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbos_[1]);\r
                glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, format_desc_.size, 0, GL_STREAM_DRAW_ARB);\r
                glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);\r
+                               \r
+               if(config_.vsync)\r
+               {\r
+                       auto wglSwapIntervalEXT = reinterpret_cast<void(APIENTRY*)(int)>(wglGetProcAddress("wglSwapIntervalEXT"));\r
+                       if(wglSwapIntervalEXT)\r
+                       {\r
+                               wglSwapIntervalEXT(1);\r
+                               CASPAR_LOG(info) << print() << " Successfully enabled vsync.";\r
+                       }\r
+                       else\r
+                               CASPAR_LOG(info) << print() << " Failed to enable vsync.";\r
+               }\r
 \r
                CASPAR_LOG(info) << print() << " Successfully Initialized.";\r
        }\r
@@ -541,7 +557,8 @@ safe_ptr<core::frame_consumer> create_consumer(const boost::property_tree::wptre
        config.windowed                 = ptree.get(L"windowed", config.windowed);\r
        config.key_only                 = ptree.get(L"key-only", config.key_only);\r
        config.auto_deinterlace = ptree.get(L"auto-deinterlace", config.auto_deinterlace);\r
-       \r
+       config.vsync                    = ptree.get(L"vsync", config.vsync);\r
+\r
        auto stretch_str = ptree.get(L"stretch", L"default");\r
        if(stretch_str == L"uniform")\r
                config.stretch = stretch::uniform;\r