From 9e878cb92c41866b7239928b8f728ac2752e475c Mon Sep 17 00:00:00 2001 From: Ken Thomases Date: Tue, 2 Jul 2013 01:25:50 -0500 Subject: [PATCH] winemac: Add registry setting to disable vertical sync. --- dlls/winemac.drv/macdrv.h | 1 + dlls/winemac.drv/macdrv_main.c | 4 ++++ dlls/winemac.drv/opengl.c | 11 +++++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h index 4c761afe72b..3c7bea5403b 100644 --- a/dlls/winemac.drv/macdrv.h +++ b/dlls/winemac.drv/macdrv.h @@ -36,6 +36,7 @@ extern BOOL skip_single_buffer_flushes DECLSPEC_HIDDEN; +extern BOOL allow_vsync DECLSPEC_HIDDEN; extern const char* debugstr_cf(CFTypeRef t) DECLSPEC_HIDDEN; diff --git a/dlls/winemac.drv/macdrv_main.c b/dlls/winemac.drv/macdrv_main.c index 29dc0b7ece0..6bae707656a 100644 --- a/dlls/winemac.drv/macdrv_main.c +++ b/dlls/winemac.drv/macdrv_main.c @@ -48,6 +48,7 @@ DWORD thread_data_tls_index = TLS_OUT_OF_INDEXES; int topmost_float_inactive = TOPMOST_FLOAT_INACTIVE_NONFULLSCREEN; int capture_displays_for_fullscreen = 0; BOOL skip_single_buffer_flushes = FALSE; +BOOL allow_vsync = TRUE; /************************************************************************** @@ -160,6 +161,9 @@ static void setup_options(void) if (!get_config_key(hkey, appkey, "SkipSingleBufferFlushes", buffer, sizeof(buffer))) skip_single_buffer_flushes = IS_OPTION_TRUE(buffer[0]); + if (!get_config_key(hkey, appkey, "AllowVerticalSync", buffer, sizeof(buffer))) + allow_vsync = IS_OPTION_TRUE(buffer[0]); + if (appkey) RegCloseKey(appkey); if (hkey) RegCloseKey(hkey); } diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c index abd563a716a..0922371a230 100644 --- a/dlls/winemac.drv/opengl.c +++ b/dlls/winemac.drv/opengl.c @@ -2988,9 +2988,12 @@ static void load_extensions(void) register_extension("WGL_EXT_extensions_string"); opengl_funcs.ext.p_wglGetExtensionsStringEXT = macdrv_wglGetExtensionsStringEXT; - register_extension("WGL_EXT_swap_control"); - opengl_funcs.ext.p_wglSwapIntervalEXT = macdrv_wglSwapIntervalEXT; - opengl_funcs.ext.p_wglGetSwapIntervalEXT = macdrv_wglGetSwapIntervalEXT; + if (allow_vsync) + { + register_extension("WGL_EXT_swap_control"); + opengl_funcs.ext.p_wglSwapIntervalEXT = macdrv_wglSwapIntervalEXT; + opengl_funcs.ext.p_wglGetSwapIntervalEXT = macdrv_wglGetSwapIntervalEXT; + } /* Presumably identical to [W]GL_ARB_framebuffer_sRGB, above, but clients may check for either, so register them separately. */ @@ -3245,7 +3248,7 @@ static BOOL create_context(struct wgl_context *context, CGLContextObj share) only make sense for double-buffered contexts, though. In theory, for single-buffered contexts, there's no such thing as a swap. But OS X will synchronize flushes of single-buffered contexts if this is set. */ - if (pf->double_buffer) + if (pf->double_buffer && allow_vsync) swap_interval = 1; else swap_interval = 0;