[PATCH 5/5] wgl: make context not current before deleting it
Roderick Colenbrander
thunderbird2k at gmail.com
Mon Apr 26 08:49:57 CDT 2010
---
dlls/opengl32/tests/opengl.c | 5 +++++
dlls/winex11.drv/opengl.c | 4 ++++
2 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c
index a59f8d2..ab55e0b 100644
--- a/dlls/opengl32/tests/opengl.c
+++ b/dlls/opengl32/tests/opengl.c
@@ -552,6 +552,11 @@ static void test_deletecontext(HDC hdc)
res = wglDeleteContext(hglrc);
ok(res == TRUE, "wglDeleteContext failed\n");
+
+ /* WGL makes a context not current when deleting it. This differs from GLX behavior where
+ * deletion takes place when the thread becomes not current. */
+ hglrc = wglGetCurrentContext();
+ ok(hglrc == NULL, "A WGL context is active while none was expected\n");
}
static void test_make_current_read(HDC hdc)
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index ccd9050..d8f8d0a 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -1783,6 +1783,10 @@ BOOL CDECL X11DRV_wglDeleteContext(HGLRC hglrc)
return FALSE;
}
+ /* WGL makes a context not current if it is active before deletion. GLX waits until the context is not current. */
+ if (ctx == NtCurrentTeb()->glContext)
+ wglMakeCurrent(ctx->hdc, NULL);
+
if (ctx->ctx)
{
wine_tsx11_lock();
--
1.6.3.3
More information about the wine-patches
mailing list