Ken Thomases : winemac: Implement WGL_EXT_swap_control.
Alexandre Julliard
julliard at winehq.org
Wed Mar 6 13:11:53 CST 2013
Module: wine
Branch: master
Commit: 3f807e7a1a59aa62c626142f7f98e40d11008056
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3f807e7a1a59aa62c626142f7f98e40d11008056
Author: Ken Thomases <ken at 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))
More information about the wine-cvs
mailing list