Module: wine Branch: master Commit: 967a49fcb24493dafe9c39ffa49eee3f2bea87e8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=967a49fcb24493dafe9c39ffa4...
Author: Ken Thomases ken@codeweavers.com Date: Tue Jul 2 01:25:00 2013 -0500
winemac: Force swap interval to 0 for single-buffered contexts to avoid vsync'ed flushes.
---
dlls/winemac.drv/opengl.c | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c index 904158b..69f94e2 100644 --- a/dlls/winemac.drv/opengl.c +++ b/dlls/winemac.drv/opengl.c @@ -2901,7 +2901,9 @@ static BOOL macdrv_wglSwapIntervalEXT(int interval) return FALSE; }
- if (interval > 1) + if (!pixel_formats[context->format - 1].double_buffer) + interval = 0; + else if (interval > 1) interval = 1;
value = interval; @@ -3238,8 +3240,14 @@ static BOOL create_context(struct wgl_context *context, CGLContextObj share) }
/* According to the WGL_EXT_swap_control docs, the default swap interval for - a context is 1. CGL contexts default to 0, so we need to set it. */ - swap_interval = 1; + a context is 1. CGL contexts default to 0, so we need to set it. This + 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) + swap_interval = 1; + else + swap_interval = 0; err = CGLSetParameter(context->cglcontext, kCGLCPSwapInterval, (GLint*)&swap_interval); if (err != kCGLNoError) WARN("CGLSetParameter(kCGLCPSwapInterval) failed with error %d %s; leaving un-vsynced\n", err, CGLErrorString(err));