Module: wine Branch: master Commit: 3f807e7a1a59aa62c626142f7f98e40d11008056 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3f807e7a1a59aa62c626142f7f...
Author: Ken Thomases ken@codeweavers.com Date: Wed Mar 6 04:59:35 2013 -0600
winemac: Implement WGL_EXT_swap_control.
---
dlls/winemac.drv/opengl.c | 65 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c index c62db1a..0f62e28 100644 --- a/dlls/winemac.drv/opengl.c +++ b/dlls/winemac.drv/opengl.c @@ -2327,6 +2327,31 @@ static BOOL macdrv_wglGetPixelFormatAttribfvARB(HDC hdc, int iPixelFormat, int i }
+/********************************************************************** + * macdrv_wglGetSwapIntervalEXT + * + * WGL_EXT_swap_control: wglGetSwapIntervalEXT + */ +static int macdrv_wglGetSwapIntervalEXT(void) +{ + struct wgl_context *context = NtCurrentTeb()->glContext; + long value; + CGLError err; + + TRACE("\n"); + + err = CGLGetParameter(context->cglcontext, kCGLCPSwapInterval, (GLint*)&value); + if (err != kCGLNoError) + { + WARN("CGLGetParameter(kCGLCPSwapInterval) failed; error %d %s\n", + err, CGLErrorString(err)); + value = 1; + } + + return value; +} + + /*********************************************************************** * macdrv_wglMakeContextCurrentARB * @@ -2686,6 +2711,42 @@ static BOOL macdrv_wglSetPixelFormatWINE(HDC hdc, int fmt) }
+/********************************************************************** + * macdrv_wglSwapIntervalEXT + * + * WGL_EXT_swap_control: wglSwapIntervalEXT + */ +static BOOL macdrv_wglSwapIntervalEXT(int interval) +{ + struct wgl_context *context = NtCurrentTeb()->glContext; + long value; + CGLError err; + + TRACE("interval %d\n", interval); + + if (interval < 0) + { + SetLastError(ERROR_INVALID_DATA); + return FALSE; + } + + if (interval > 1) + interval = 1; + + value = interval; + err = CGLSetParameter(context->cglcontext, kCGLCPSwapInterval, (GLint*)&value); + if (err != kCGLNoError) + { + WARN("CGLSetParameter(kCGLCPSwapInterval) failed; error %d %s\n", + err, CGLErrorString(err)); + SetLastError(ERROR_GEN_FAILURE); + return FALSE; + } + + return TRUE; +} + + static void register_extension(const char *ext) { if (gl_info.wglExtensions[0]) @@ -2754,6 +2815,10 @@ 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; + /* Presumably identical to [W]GL_ARB_framebuffer_sRGB, above, but clients may check for either, so register them separately. */ if (gluCheckExtension((GLubyte*)"GL_EXT_framebuffer_sRGB", (GLubyte*)gl_info.glExtensions))