Sorry, this was the patch that made gametap work, rediffed against curretn git: diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index b4845ad..06c20ea 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -1863,27 +1863,35 @@ BOOL X11DRV_wglShareLists(HGLRC hglrc1, HGLRC hglrc2) { if (!has_opengl()) return FALSE; if (NULL != dest && dest->ctx != NULL) { - ERR("Could not share display lists, context already created !\n"); - return FALSE; - } else { - if (org->ctx == NULL) { - int indirect = (GetObjectType(org->hdc) == OBJ_MEMDC); - wine_tsx11_lock(); - describeContext(org); + WARN("Destination context already created, destroying it\n"); + pglXDestroyContext(gdi_display, dest->ctx); + dest->ctx = NULL; + } + if (org->ctx == NULL) { + int indirect = (GetObjectType(org->hdc) == OBJ_MEMDC); + wine_tsx11_lock(); + describeContext(org); + + if(org->vis) + org->ctx = pglXCreateContext(gdi_display, org->vis, NULL, !indirect); + else /* Create a GLX Context for a pbuffer */ + org->ctx = pglXCreateNewContext(gdi_display, org->fmt->fbconfig, org->fmt->render_type, NULL, True); + wine_tsx11_unlock(); + TRACE(" created a delayed OpenGL context (%p) for Wine context %p\n", org->ctx, org); + } + if (NULL != dest) { + int indirect = (GetObjectType(dest->hdc) == OBJ_MEMDC); + wine_tsx11_lock(); + describeContext(dest); + /* Create the destination context with display lists shared */ + if(dest->vis) + dest->ctx = pglXCreateContext(gdi_display, dest->vis, org->ctx, !indirect); + else /* Create a GLX Context for a pbuffer */ + dest->ctx = pglXCreateNewContext(gdi_display, dest->fmt->fbconfig, dest->fmt->render_type, org->ctx, True); + wine_tsx11_unlock(); + 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; - org->ctx = create_glxcontext(gdi_display, org, NULL, !indirect); - wine_tsx11_unlock(); - TRACE(" created a delayed OpenGL context (%p) for Wine context %p\n", org->ctx, org); - } - if (NULL != dest) { - int indirect = (GetObjectType(dest->hdc) == OBJ_MEMDC); - wine_tsx11_lock(); - describeContext(dest); - dest->ctx = create_glxcontext(gdi_display, dest, org->ctx, !indirect); - wine_tsx11_unlock(); - 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; - } } return FALSE; } [/code]