Roderick Colenbrander : wgl: Make context not current before deleting it.
Module: wine Branch: master Commit: ab788c7c39f086cedd3cb5acfcaecc827f3aec59 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ab788c7c39f086cedd3cb5acfc... Author: Roderick Colenbrander <thunderbird2k(a)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();
participants (1)
-
Alexandre Julliard