Roderick Colenbrander : opengl32: Add a test for WGL_EXT_swap_control.
Alexandre Julliard
julliard at winehq.org
Mon Apr 29 13:55:25 CDT 2013
Module: wine
Branch: master
Commit: 074d89a078b945410cae62479dfc451b17f9125e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=074d89a078b945410cae62479dfc451b17f9125e
Author: Roderick Colenbrander <thunderbird2k at gmail.com>
Date: Sun Apr 28 16:39:28 2013 -0700
opengl32: Add a test for WGL_EXT_swap_control.
---
dlls/opengl32/tests/opengl.c | 123 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 123 insertions(+), 0 deletions(-)
diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c
index 02a72c8..066b026 100644
--- a/dlls/opengl32/tests/opengl.c
+++ b/dlls/opengl32/tests/opengl.c
@@ -86,6 +86,10 @@ static BOOL (WINAPI *pwglGetPixelFormatAttribivARB)(HDC, int, int, UINT, const i
static HPBUFFERARB* (WINAPI *pwglCreatePbufferARB)(HDC, int, int, int, const int *);
static HDC (WINAPI *pwglGetPbufferDCARB)(HPBUFFERARB);
+/* WGL_EXT_swap_control */
+static BOOL (WINAPI *pwglSwapIntervalEXT)(int interval);
+static int (WINAPI *pwglGetSwapIntervalEXT)(void);
+
static const char* wgl_extensions = NULL;
static void init_functions(void)
@@ -114,6 +118,10 @@ static void init_functions(void)
GET_PROC(wglGetPbufferDCARB)
GET_PROC(wglReleasePbufferDCARB)
+ /* WGL_EXT_swap_control */
+ GET_PROC(wglSwapIntervalEXT)
+ GET_PROC(wglGetSwapIntervalEXT)
+
#undef GET_PROC
}
@@ -1478,6 +1486,116 @@ static void test_destroy_read(HDC oldhdc)
wglMakeCurrent(oldhdc, oldctx);
}
+static void test_swap_control(HDC oldhdc)
+{
+ PIXELFORMATDESCRIPTOR pf_desc =
+ {
+ sizeof(PIXELFORMATDESCRIPTOR),
+ 1, /* version */
+ PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
+ PFD_TYPE_RGBA,
+ 24, /* 24-bit color depth */
+ 0, 0, 0, 0, 0, 0, /* color bits */
+ 0, /* alpha buffer */
+ 0, /* shift bit */
+ 0, /* accumulation buffer */
+ 0, 0, 0, 0, /* accum bits */
+ 32, /* z-buffer */
+ 0, /* stencil buffer */
+ 0, /* auxiliary buffer */
+ PFD_MAIN_PLANE, /* main layer */
+ 0, /* reserved */
+ 0, 0, 0 /* layer masks */
+ };
+ int pixel_format;
+ HWND window1, window2;
+ HGLRC ctx1, ctx2, oldctx;
+ BOOL ret;
+ HDC dc1, dc2;
+ int interval;
+
+ oldctx = wglGetCurrentContext();
+ ok(!!oldctx, "Expected to find a valid current context.\n");
+
+ window1 = CreateWindowA("static", "opengl32_test",
+ WS_POPUP, 0, 0, 640, 480, 0, 0, 0, 0);
+ ok(!!window1, "Failed to create window1, last error %#x.\n", GetLastError());
+
+ dc1 = GetDC(window1);
+ ok(!!dc1, "Failed to get DC.\n");
+
+ pixel_format = ChoosePixelFormat(dc1, &pf_desc);
+ if (!pixel_format)
+ {
+ win_skip("Failed to find pixel format.\n");
+ ReleaseDC(window1, dc1);
+ DestroyWindow(window1);
+ return;
+ }
+
+ ret = SetPixelFormat(dc1, pixel_format, &pf_desc);
+ ok(ret, "Failed to set pixel format, last error %#x.\n", GetLastError());
+
+ ctx1 = wglCreateContext(dc1);
+ ok(!!ctx1, "Failed to create GL context, last error %#x.\n", GetLastError());
+
+ ret = wglMakeCurrent(dc1, ctx1);
+ ok(ret, "Failed to make context current, last error %#x.\n", GetLastError());
+
+ interval = pwglGetSwapIntervalEXT();
+ ok(interval == 1, "Expected default swap interval 1, got %d\n", interval);
+
+ ret = pwglSwapIntervalEXT(0);
+ ok(ret, "Failed to set swap interval to 0, last error %#x.\n", GetLastError());
+
+ interval = pwglGetSwapIntervalEXT();
+ ok(interval == 0, "Expected default swap interval 0, got %d\n", interval);
+
+ /* Check what interval we get on a second context on the same drawable.*/
+ ctx2 = wglCreateContext(dc1);
+ ok(!!ctx2, "Failed to create GL context, last error %#x.\n", GetLastError());
+
+ ret = wglMakeCurrent(dc1, ctx2);
+ ok(ret, "Failed to make context current, last error %#x.\n", GetLastError());
+
+ interval = pwglGetSwapIntervalEXT();
+ ok(interval == 0, "Expected swap interval 0, got %d\n", interval);
+
+ /* A second window is created to see whether its swap interval was affected
+ * by previous calls.
+ */
+ window2 = CreateWindowA("static", "opengl32_test",
+ WS_POPUP, 0, 0, 640, 480, 0, 0, 0, 0);
+ ok(!!window2, "Failed to create window2, last error %#x.\n", GetLastError());
+
+ dc2 = GetDC(window2);
+ ok(!!dc2, "Failed to get DC.\n");
+
+ ret = SetPixelFormat(dc2, pixel_format, &pf_desc);
+ ok(ret, "Failed to set pixel format, last error %#x.\n", GetLastError());
+
+ ret = wglMakeCurrent(dc2, ctx1);
+ ok(ret, "Failed to make context current, last error %#x.\n", GetLastError());
+
+ /* Since the second window lacks the swap interval, this proves that the interval
+ * is not global or shared among contexts.
+ */
+ interval = pwglGetSwapIntervalEXT();
+ todo_wine ok(interval == 1, "Expected swap interval 1, got %d\n", interval);
+
+ ret = wglDeleteContext(ctx1);
+ ok(ret, "Failed to delete GL context, last error %#x.\n", GetLastError());
+ ret = wglDeleteContext(ctx2);
+ ok(ret, "Failed to delete GL context, last error %#x.\n", GetLastError());
+
+ ReleaseDC(window1, dc1);
+ DestroyWindow(window1);
+ ReleaseDC(window2, dc2);
+ DestroyWindow(window2);
+
+ wglMakeCurrent(oldhdc, oldctx);
+}
+
START_TEST(opengl)
{
HWND hwnd;
@@ -1595,6 +1713,11 @@ START_TEST(opengl)
else
skip("WGL_ARB_pbuffer not supported, skipping pbuffer test\n");
+ if(strstr(wgl_extensions, "WGL_EXT_swap_control"))
+ test_swap_control(hdc);
+ else
+ skip("WGL_EXT_swap_control not supported, skipping test\n");
+
cleanup:
ReleaseDC(hwnd, hdc);
DestroyWindow(hwnd);
More information about the wine-cvs
mailing list