Ken Thomases : winex11: Don' t reset OpenGL swap interval of window on SetParent().
Alexandre Julliard
julliard at winehq.org
Fri Mar 21 14:33:51 CDT 2014
Module: wine
Branch: master
Commit: 6696e7d9e1b59c22b8842803670ed917ebb2a3d4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6696e7d9e1b59c22b8842803670ed917ebb2a3d4
Author: Ken Thomases <ken at codeweavers.com>
Date: Fri Mar 21 00:18:58 2014 -0500
winex11: Don't reset OpenGL swap interval of window on SetParent().
---
dlls/opengl32/tests/opengl.c | 16 +++++++++++++---
dlls/winex11.drv/opengl.c | 8 ++++----
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c
index 4303d1c..7384cb4 100644
--- a/dlls/opengl32/tests/opengl.c
+++ b/dlls/opengl32/tests/opengl.c
@@ -1509,7 +1509,7 @@ static void test_swap_control(HDC oldhdc)
0, 0, 0 /* layer masks */
};
int pixel_format;
- HWND window1, window2;
+ HWND window1, window2, old_parent;
HGLRC ctx1, ctx2, oldctx;
BOOL ret;
HDC dc1, dc2;
@@ -1550,7 +1550,7 @@ static void test_swap_control(HDC oldhdc)
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);
+ ok(interval == 0, "Expected swap interval 0, got %d\n", interval);
/* Check what interval we get on a second context on the same drawable.*/
ctx2 = wglCreateContext(dc1);
@@ -1582,7 +1582,17 @@ static void test_swap_control(HDC oldhdc)
* is not global or shared among contexts.
*/
interval = pwglGetSwapIntervalEXT();
- ok(interval == 1, "Expected swap interval 1, got %d\n", interval);
+ ok(interval == 1, "Expected default swap interval 1, got %d\n", interval);
+
+ /* Test if setting the parent of a window resets the swap interval. */
+ ret = wglMakeCurrent(dc1, ctx1);
+ ok(ret, "Failed to make context current, last error %#x.\n", GetLastError());
+
+ old_parent = SetParent(window1, window2);
+ ok(!!old_parent, "Failed to make window1 a child of window2, last error %#x.\n", GetLastError());
+
+ interval = pwglGetSwapIntervalEXT();
+ ok(interval == 0, "Expected swap interval 0, got %d\n", interval);
ret = wglDeleteContext(ctx1);
ok(ret, "Failed to delete GL context, last error %#x.\n", GetLastError());
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index d06565a..759e51f 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -1253,10 +1253,6 @@ static void free_gl_drawable( struct gl_drawable *gl )
static BOOL create_gl_drawable( HWND hwnd, HWND parent, struct gl_drawable *gl )
{
gl->drawable = 0;
- /* Default GLX and WGL swap interval is 1, but in case of glXSwapIntervalSGI
- * there is no way to query it, so we have to store it here.
- */
- gl->swap_interval = 1;
if (GetAncestor( hwnd, GA_PARENT ) == GetDesktopWindow()) /* top-level window */
{
@@ -1331,6 +1327,10 @@ static BOOL set_win_format( HWND hwnd, const struct wgl_pixel_format *format )
struct gl_drawable *gl, *prev;
gl = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*gl) );
+ /* Default GLX and WGL swap interval is 1, but in case of glXSwapIntervalSGI
+ * there is no way to query it, so we have to store it here.
+ */
+ gl->swap_interval = 1;
gl->format = format;
gl->visual = pglXGetVisualFromFBConfig( gdi_display, format->fbconfig );
if (!gl->visual)
More information about the wine-cvs
mailing list