Roderick Colenbrander : wgl: Make context not current before deleting it.

Alexandre Julliard julliard at winehq.org
Tue Apr 27 16:59:31 CDT 2010


Module: wine
Branch: master
Commit: ab788c7c39f086cedd3cb5acfcaecc827f3aec59
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ab788c7c39f086cedd3cb5acfcaecc827f3aec59

Author: Roderick Colenbrander <thunderbird2k at gmail.com>
Date:   Mon Apr 26 15:49:57 2010 +0200

wgl: Make context not current before deleting it.

---

 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();




More information about the wine-cvs mailing list