[PATCH 5/5] wined3d: Restore the thread's previous GL context in WineD3D_ReleaseFakeGLContext().
Henri Verbeet
hverbeet at codeweavers.com
Tue Oct 27 04:10:43 CDT 2009
---
dlls/wined3d/directx.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index ffd3301..2640aa6 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -217,6 +217,8 @@ struct wined3d_fake_gl_ctx
HDC dc;
HWND wnd;
HGLRC gl_ctx;
+ HDC restore_dc;
+ HGLRC restore_gl_ctx;
};
static void WineD3D_ReleaseFakeGLContext(struct wined3d_fake_gl_ctx *ctx)
@@ -236,6 +238,11 @@ static void WineD3D_ReleaseFakeGLContext(struct wined3d_fake_gl_ctx *ctx)
ReleaseDC(ctx->wnd, ctx->dc);
DestroyWindow(ctx->wnd);
+
+ if (ctx->restore_gl_ctx && !pwglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx))
+ {
+ ERR_(d3d_caps)("Failed to restore previous GL context.\n");
+ }
}
static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx)
@@ -245,6 +252,9 @@ static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx)
TRACE("getting context...\n");
+ ctx->restore_dc = pwglGetCurrentDC();
+ ctx->restore_gl_ctx = pwglGetCurrentContext();
+
/* We need a fake window as a hdc retrieved using GetDC(0) can't be used for much GL purposes. */
ctx->wnd = CreateWindowA(WINED3D_OPENGL_WINDOW_CLASS_NAME, "WineD3D fake window",
WS_OVERLAPPEDWINDOW, 10, 10, 10, 10, NULL, NULL, NULL, NULL);
@@ -309,6 +319,10 @@ fail:
ctx->dc = NULL;
if (ctx->wnd) DestroyWindow(ctx->wnd);
ctx->wnd = NULL;
+ if (ctx->restore_gl_ctx && !pwglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx))
+ {
+ ERR_(d3d_caps)("Failed to restore previous GL context.\n");
+ }
return FALSE;
}
--
1.6.4.4
More information about the wine-patches
mailing list