#pragma warning (pop)\r
#endif\r
\r
+typedef int (*PFNWGLEXTGETSWAPINTERVALPROC) (void);\r
+ \r
namespace caspar { namespace ogl {\r
\r
enum stretch\r
bool auto_deinterlace;\r
bool key_only;\r
aspect_ratio aspect; \r
+ bool vsync;\r
\r
configuration()\r
: name(L"ogl")\r
, auto_deinterlace(true)\r
, key_only(false)\r
, aspect(aspect_invalid)\r
+ , vsync(false)\r
{\r
}\r
};\r
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
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
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