On Sun, Mar 12, 2006 at 05:44:57PM +0100, Leon Freitag wrote:
The patch
http://source.winehq.org/git/?p=wine.git;a=commit;h=13268261bbe0d4013937a6a9...
has introduced an annoying performance regression which affected all opengl
games. (see http://bugs.winehq.org/show_bug.cgi?id=4499).
Does this help?
Huw.
--
Huw Davies
huw@codeweavers.com
diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c
index 56c8ad1..aecba9c 100644
--- a/dlls/opengl32/wgl.c
+++ b/dlls/opengl32/wgl.c
@@ -78,6 +78,7 @@ static char* internal_gl_extensions = NU
typedef struct wine_glcontext {
HDC hdc;
+ DWORD type;
Display *display;
XVisualInfo *vis;
GLXFBConfig fb_conf;
@@ -106,7 +107,7 @@ void enter_gl(void)
ctx = get_context_from_GLXContext(gl_ctx);
wine_tsx11_unlock_ptr(); /* unlock before calling GDI apis */
- if(ctx && GetObjectType(ctx->hdc) == OBJ_MEMDC)
+ if(ctx && ctx->type == OBJ_MEMDC)
ExtEscape(ctx->hdc, X11DRV_ESCAPE, sizeof(escape), (LPCSTR)&escape, 0, NULL);
wine_tsx11_lock_ptr();
@@ -250,6 +251,7 @@ HGLRC WINAPI wglCreateContext(HDC hdc)
ret = alloc_context();
LEAVE_GL();
ret->hdc = hdc;
+ ret->type = GetObjectType(hdc);
ret->display = display;
ret->fb_conf = cur_cfg;
/*ret->vis = vis;*/
@@ -673,7 +675,7 @@ BOOL WINAPI wglShareLists(HGLRC hglrc1,
if (org->ctx == NULL) {
ENTER_GL();
describeContext(org);
- org->ctx = glXCreateContext(org->display, org->vis, NULL, GetObjectType(org->hdc) == OBJ_MEMDC ? False : True);
+ org->ctx = glXCreateContext(org->display, org->vis, NULL, org->type == OBJ_MEMDC ? False : True);
LEAVE_GL();
TRACE(" created a delayed OpenGL context (%p) for Wine context %p\n", org->ctx, org);
}
@@ -681,7 +683,7 @@ BOOL WINAPI wglShareLists(HGLRC hglrc1,
ENTER_GL();
describeContext(dest);
/* Create the destination context with display lists shared */
- dest->ctx = glXCreateContext(org->display, dest->vis, org->ctx, GetObjectType(org->hdc) == OBJ_MEMDC ? False : True);
+ dest->ctx = glXCreateContext(org->display, dest->vis, org->ctx, org->type == OBJ_MEMDC ? False : True);
LEAVE_GL();
TRACE(" created a delayed OpenGL context (%p) for Wine context %p sharing lists with OpenGL ctx %p\n", dest->ctx, dest, org->ctx);
return TRUE;