From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/opengl.c | 34 +------ dlls/wineandroid.drv/opengl.c | 7 -- dlls/winemac.drv/opengl.c | 55 ----------- dlls/winewayland.drv/opengl.c | 169 +++++++++++----------------------- dlls/winex11.drv/opengl.c | 75 +-------------- include/wine/opengl_driver.h | 1 - 6 files changed, 59 insertions(+), 282 deletions(-)
diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index fba5d4109b1..1fc51004b7f 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -430,12 +430,6 @@ static BOOL egldrv_context_copy( void *src_private, void *dst_private, UINT mask return FALSE; }
-static BOOL egldrv_context_share( void *src_private, void *dst_private ) -{ - FIXME( "stub!\n" ); - return FALSE; -} - static BOOL egldrv_context_flush( void *private, HWND hwnd, HDC hdc, int interval, BOOL finish ) { FIXME( "stub!\n" ); @@ -463,7 +457,6 @@ static const struct opengl_driver_funcs egldrv_funcs = .p_context_create = egldrv_context_create, .p_context_destroy = egldrv_context_destroy, .p_context_copy = egldrv_context_copy, - .p_context_share = egldrv_context_share, .p_context_flush = egldrv_context_flush, .p_context_make_current = egldrv_context_make_current, }; @@ -738,12 +731,6 @@ static BOOL osmesa_context_copy( void *src_private, void *dst_private, UINT mask return FALSE; }
-static BOOL osmesa_context_share( void *src_private, void *dst_private ) -{ - FIXME( "not supported yet\n" ); - return FALSE; -} - static BOOL osmesa_context_make_current( HDC draw_hdc, HDC read_hdc, void *private ) { struct osmesa_context *context = private; @@ -809,7 +796,6 @@ static const struct opengl_driver_funcs osmesa_driver_funcs = .p_context_create = osmesa_context_create, .p_context_destroy = osmesa_context_destroy, .p_context_copy = osmesa_context_copy, - .p_context_share = osmesa_context_share, .p_context_flush = osmesa_context_flush, .p_context_make_current = osmesa_context_make_current, }; @@ -892,11 +878,6 @@ static BOOL nulldrv_context_copy( void *src_private, void *dst_private, UINT mas return FALSE; }
-static BOOL nulldrv_context_share( void *src_private, void *dst_private ) -{ - return FALSE; -} - static BOOL nulldrv_context_flush( void *private, HWND hwnd, HDC hdc, int interval, BOOL finish ) { return FALSE; @@ -922,7 +903,6 @@ static const struct opengl_driver_funcs nulldrv_funcs = .p_context_create = nulldrv_context_create, .p_context_destroy = nulldrv_context_destroy, .p_context_copy = nulldrv_context_copy, - .p_context_share = nulldrv_context_share, .p_context_flush = nulldrv_context_flush, .p_context_make_current = nulldrv_context_make_current, }; @@ -1136,16 +1116,6 @@ static BOOL win32u_wglCopyContext( struct wgl_context *src, struct wgl_context * return funcs->p_context_copy( src->driver_private, dst->driver_private, mask ); }
-static BOOL win32u_wglShareLists( struct wgl_context *src, struct wgl_context *dst ) -{ - const struct opengl_driver_funcs *funcs = src->driver_funcs; - - TRACE( "src %p, dst %p\n", src, dst ); - - if (funcs != dst->driver_funcs) return FALSE; - return funcs->p_context_share( src->driver_private, dst->driver_private ); -} - static BOOL win32u_wglMakeContextCurrentARB( HDC draw_hdc, HDC read_hdc, struct wgl_context *context ) { const struct opengl_driver_funcs *funcs; @@ -1746,7 +1716,7 @@ static void memory_funcs_init(void) memory_funcs.p_wglCreateContext = win32u_wglCreateContext; memory_funcs.p_wglDeleteContext = win32u_wglDeleteContext; memory_funcs.p_wglCopyContext = win32u_wglCopyContext; - memory_funcs.p_wglShareLists = win32u_wglShareLists; + memory_funcs.p_wglShareLists = (void *)1; /* never called */ memory_funcs.p_wglMakeCurrent = win32u_wglMakeCurrent;
memory_funcs.p_wglSwapBuffers = win32u_wglSwapBuffers; @@ -1779,7 +1749,7 @@ static void display_funcs_init(void) display_funcs.p_wglCreateContext = win32u_wglCreateContext; display_funcs.p_wglDeleteContext = win32u_wglDeleteContext; display_funcs.p_wglCopyContext = win32u_wglCopyContext; - display_funcs.p_wglShareLists = win32u_wglShareLists; + display_funcs.p_wglShareLists = (void *)1; /* never called */ display_funcs.p_wglMakeCurrent = win32u_wglMakeCurrent;
display_funcs.p_wglSwapBuffers = win32u_wglSwapBuffers; diff --git a/dlls/wineandroid.drv/opengl.c b/dlls/wineandroid.drv/opengl.c index 79204b5e277..ea426b5be86 100644 --- a/dlls/wineandroid.drv/opengl.c +++ b/dlls/wineandroid.drv/opengl.c @@ -335,12 +335,6 @@ static void *android_get_proc_address( const char *name ) return funcs->p_eglGetProcAddress( name ); }
-static BOOL android_context_share( void *org, void *dest ) -{ - FIXME( "%p %p\n", org, dest ); - return FALSE; -} - static void set_swap_interval( struct gl_drawable *gl, int interval ) { if (interval < 0) interval = -interval; @@ -401,7 +395,6 @@ static struct opengl_driver_funcs android_driver_funcs = .p_context_create = android_context_create, .p_context_destroy = android_context_destroy, .p_context_copy = android_context_copy, - .p_context_share = android_context_share, .p_context_flush = android_context_flush, .p_context_make_current = android_context_make_current, }; diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c index 6eb9120fb59..f78f2318779 100644 --- a/dlls/winemac.drv/opengl.c +++ b/dlls/winemac.drv/opengl.c @@ -74,8 +74,6 @@ struct macdrv_context macdrv_view read_view; RECT read_rect; CGLPBufferObj read_pbuffer; - BOOL has_been_current; - BOOL sharing; int swap_interval; LONG view_moved; unsigned int last_flush_time; @@ -2483,7 +2481,6 @@ static BOOL macdrv_context_make_current(HDC draw_hdc, HDC read_hdc, void *privat context->read_view, wine_dbgstr_rect(&context->read_rect), context->read_pbuffer, context->format);
make_context_current(context, FALSE); - context->has_been_current = TRUE; NtCurrentTeb()->glReserved2 = context;
return TRUE; @@ -2973,57 +2970,6 @@ static BOOL macdrv_context_destroy(void *private) return TRUE; }
-static BOOL macdrv_context_share(void *src_private, void *dst_private) -{ - struct macdrv_context *org = src_private, *dest = dst_private; - macdrv_opengl_context saved_context; - CGLContextObj saved_cglcontext; - - TRACE("org %p dest %p\n", org, dest); - - /* Sharing of display lists works differently in Mac OpenGL and WGL. In Mac OpenGL it is done - * at context creation time but in case of WGL it is done using wglShareLists. - * - * The approach is to create a Mac OpenGL context in wglCreateContext / wglCreateContextAttribsARB - * and when a program requests sharing we recreate the destination context if it hasn't been made - * current or when it hasn't shared display lists before. - */ - - if (dest->has_been_current) - { - WARN("could not share display lists, the destination context has been current already\n"); - return FALSE; - } - else if (dest->sharing) - { - WARN("could not share display lists because dest has already shared lists before\n"); - return FALSE; - } - - /* Re-create the Mac context and share display lists */ - saved_context = dest->context; - saved_cglcontext = dest->cglcontext; - dest->context = NULL; - dest->cglcontext = NULL; - if (!create_context(dest, org->cglcontext, dest->major)) - { - dest->context = saved_context; - dest->cglcontext = saved_cglcontext; - return FALSE; - } - - /* Implicitly disposes of saved_cglcontext. */ - macdrv_dispose_opengl_context(saved_context); - - TRACE("re-created OpenGL context %p/%p/%p sharing lists with context %p/%p/%p\n", - dest, dest->context, dest->cglcontext, org, org->context, org->cglcontext); - - org->sharing = TRUE; - dest->sharing = TRUE; - - return TRUE; -} - static void *macdrv_get_proc_address(const char *name) { /* redirect some standard OpenGL functions */ @@ -3105,7 +3051,6 @@ static const struct opengl_driver_funcs macdrv_driver_funcs = .p_context_create = macdrv_context_create, .p_context_destroy = macdrv_context_destroy, .p_context_copy = macdrv_context_copy, - .p_context_share = macdrv_context_share, .p_context_flush = macdrv_context_flush, .p_context_make_current = macdrv_context_make_current, .p_pbuffer_create = macdrv_pbuffer_create, diff --git a/dlls/winewayland.drv/opengl.c b/dlls/winewayland.drv/opengl.c index dfda1972dcf..3cc510eecf9 100644 --- a/dlls/winewayland.drv/opengl.c +++ b/dlls/winewayland.drv/opengl.c @@ -73,9 +73,6 @@ struct wayland_context EGLConfig config; EGLContext context; struct wayland_gl_drawable *draw, *read, *new_draw, *new_read; - EGLint attribs[16]; - BOOL has_been_current; - BOOL sharing; };
struct wgl_pbuffer @@ -294,7 +291,6 @@ static BOOL wayland_context_make_current(HDC draw_hdc, HDC read_hdc, void *priva ctx->draw = draw; ctx->read = read; ctx->new_draw = ctx->new_read = NULL; - ctx->has_been_current = TRUE; NtCurrentTeb()->glReserved2 = ctx; } else @@ -311,68 +307,6 @@ static BOOL wayland_context_make_current(HDC draw_hdc, HDC read_hdc, void *priva return ret; }
-static BOOL wayland_context_populate_attribs(struct wayland_context *ctx, const int *wgl_attribs) -{ - EGLint *attribs_end = ctx->attribs; - - if (!wgl_attribs) goto out; - - for (; wgl_attribs[0] != 0; wgl_attribs += 2) - { - EGLint name; - - TRACE("%#x %#x\n", wgl_attribs[0], wgl_attribs[1]); - - /* Find the EGL attribute names corresponding to the WGL names. - * For all of the attributes below, the values match between the two - * systems, so we can use them directly. */ - switch (wgl_attribs[0]) - { - case WGL_CONTEXT_MAJOR_VERSION_ARB: - name = EGL_CONTEXT_MAJOR_VERSION_KHR; - break; - case WGL_CONTEXT_MINOR_VERSION_ARB: - name = EGL_CONTEXT_MINOR_VERSION_KHR; - break; - case WGL_CONTEXT_FLAGS_ARB: - name = EGL_CONTEXT_FLAGS_KHR; - break; - case WGL_CONTEXT_OPENGL_NO_ERROR_ARB: - name = EGL_CONTEXT_OPENGL_NO_ERROR_KHR; - break; - case WGL_CONTEXT_PROFILE_MASK_ARB: - if (wgl_attribs[1] & WGL_CONTEXT_ES2_PROFILE_BIT_EXT) - { - ERR("OpenGL ES contexts are not supported\n"); - return FALSE; - } - name = EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR; - break; - default: - name = EGL_NONE; - FIXME("Unhandled attributes: %#x %#x\n", wgl_attribs[0], wgl_attribs[1]); - } - - if (name != EGL_NONE) - { - EGLint *dst = ctx->attribs; - /* Check if we have already set the same attribute and replace it. */ - for (; dst != attribs_end && *dst != name; dst += 2) continue; - /* Our context attribute array should have enough space for all the - * attributes we support (we merge repetitions), plus EGL_NONE. */ - assert(dst - ctx->attribs <= ARRAY_SIZE(ctx->attribs) - 3); - dst[0] = name; - dst[1] = wgl_attribs[1]; - if (dst == attribs_end) attribs_end += 2; - } - } - -out: - *attribs_end = EGL_NONE; - return TRUE; -} - - static void wayland_context_refresh(struct wayland_context *ctx) { BOOL refresh = FALSE; @@ -425,18 +359,64 @@ static BOOL wayland_set_pixel_format(HWND hwnd, int old_format, int new_format, static BOOL wayland_context_create(HDC hdc, int format, void *share_private, const int *attribs, void **private) { struct wayland_context *share = share_private, *ctx; + EGLint egl_attribs[16], *attribs_end = egl_attribs;
TRACE("hdc=%p format=%d share=%p attribs=%p\n", hdc, format, share, attribs);
- if (!(ctx = calloc(1, sizeof(*ctx)))) + for (; attribs && attribs[0] != 0; attribs += 2) { - ERR("Failed to allocate memory for GL context\n"); - return FALSE; + EGLint name; + + TRACE("%#x %#x\n", attribs[0], attribs[1]); + + /* Find the EGL attribute names corresponding to the WGL names. + * For all of the attributes below, the values match between the two + * systems, so we can use them directly. */ + switch (attribs[0]) + { + case WGL_CONTEXT_MAJOR_VERSION_ARB: + name = EGL_CONTEXT_MAJOR_VERSION_KHR; + break; + case WGL_CONTEXT_MINOR_VERSION_ARB: + name = EGL_CONTEXT_MINOR_VERSION_KHR; + break; + case WGL_CONTEXT_FLAGS_ARB: + name = EGL_CONTEXT_FLAGS_KHR; + break; + case WGL_CONTEXT_OPENGL_NO_ERROR_ARB: + name = EGL_CONTEXT_OPENGL_NO_ERROR_KHR; + break; + case WGL_CONTEXT_PROFILE_MASK_ARB: + if (attribs[1] & WGL_CONTEXT_ES2_PROFILE_BIT_EXT) + { + ERR("OpenGL ES contexts are not supported\n"); + return FALSE; + } + name = EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR; + break; + default: + name = EGL_NONE; + FIXME("Unhandled attributes: %#x %#x\n", attribs[0], attribs[1]); + } + + if (name != EGL_NONE) + { + EGLint *dst = egl_attribs; + /* Check if we have already set the same attribute and replace it. */ + for (; dst != attribs_end && *dst != name; dst += 2) continue; + /* Our context attribute array should have enough space for all the + * attributes we support (we merge repetitions), plus EGL_NONE. */ + assert(dst - egl_attribs <= ARRAY_SIZE(egl_attribs) - 3); + dst[0] = name; + dst[1] = attribs[1]; + if (dst == attribs_end) attribs_end += 2; + } } + *attribs_end = EGL_NONE;
- if (!wayland_context_populate_attribs(ctx, attribs)) + if (!(ctx = calloc(1, sizeof(*ctx)))) { - ctx->attribs[0] = EGL_NONE; + ERR("Failed to allocate memory for GL context\n"); return FALSE; }
@@ -450,7 +430,7 @@ static BOOL wayland_context_create(HDC hdc, int format, void *share_private, con funcs->p_eglBindAPI(EGL_OPENGL_API); ctx->context = funcs->p_eglCreateContext(egl->display, EGL_NO_CONFIG_KHR, share ? share->context : EGL_NO_CONTEXT, - ctx->attribs); + attribs ? egl_attribs : NULL);
pthread_mutex_lock(&gl_object_mutex); list_add_head(&gl_contexts, &ctx->entry); @@ -505,50 +485,6 @@ static void *wayland_get_proc_address(const char *name) return funcs->p_eglGetProcAddress(name); }
-static BOOL wayland_context_share(void *src_private, void *dst_private) -{ - struct wayland_context *orig = src_private, *dest = dst_private; - struct wayland_context *keep, *clobber; - - TRACE("(%p, %p)\n", orig, dest); - - /* Sharing of display lists works differently in EGL and WGL. In case of EGL - * it is done at context creation time but in case of WGL it is done using - * wglShareLists. We create an EGL context in wglCreateContext / - * wglCreateContextAttribsARB and when a program requests sharing we - * recreate the destination or source context if it hasn't been made current - * and it hasn't shared display lists before. */ - - if (!dest->has_been_current && !dest->sharing) - { - keep = orig; - clobber = dest; - } - else if (!orig->has_been_current && !orig->sharing) - { - keep = dest; - clobber = orig; - } - else - { - ERR("Could not share display lists because both of the contexts have " - "already been current or shared\n"); - return FALSE; - } - - funcs->p_eglDestroyContext(egl->display, clobber->context); - clobber->context = funcs->p_eglCreateContext(egl->display, EGL_NO_CONFIG_KHR, - keep->context, clobber->attribs); - TRACE("re-created context (%p) for Wine context %p (%p) " - "sharing lists with ctx %p (%p)\n", - clobber->context, clobber, clobber->config, - keep->context, keep->config); - - orig->sharing = TRUE; - dest->sharing = TRUE; - return TRUE; -} - static BOOL wayland_context_flush( void *private, HWND hwnd, HDC hdc, int interval, BOOL finish ) { return FALSE; @@ -642,7 +578,6 @@ static struct opengl_driver_funcs wayland_driver_funcs = .p_context_create = wayland_context_create, .p_context_destroy = wayland_context_destroy, .p_context_copy = wayland_context_copy, - .p_context_share = wayland_context_share, .p_context_flush = wayland_context_flush, .p_context_make_current = wayland_context_make_current, .p_pbuffer_create = wayland_pbuffer_create, diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index 6e1b914b55f..d0a399c0a6e 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -197,12 +197,8 @@ struct glx_pixel_format struct x11drv_context { HDC hdc; - BOOL has_been_current; - BOOL sharing; BOOL gl3_context; const struct glx_pixel_format *fmt; - int numAttribs; /* This is needed for delaying wglCreateContextAttribsARB */ - int attribList[16]; /* This is needed for delaying wglCreateContextAttribsARB */ GLXContext ctx; struct gl_drawable *drawables[2]; struct gl_drawable *new_drawables[2]; @@ -1025,17 +1021,12 @@ static struct gl_drawable *get_gl_drawable( HWND hwnd, HDC hdc ) return gl; }
-static GLXContext create_glxcontext(Display *display, struct x11drv_context *context, GLXContext shareList) +static GLXContext create_glxcontext(Display *display, struct x11drv_context *context, GLXContext shareList, const int *attribs) { GLXContext ctx;
if(context->gl3_context) - { - if(context->numAttribs) - ctx = pglXCreateContextAttribsARB(gdi_display, context->fmt->fbconfig, shareList, GL_TRUE, context->attribList); - else - ctx = pglXCreateContextAttribsARB(gdi_display, context->fmt->fbconfig, shareList, GL_TRUE, NULL); - } + ctx = pglXCreateContextAttribsARB(gdi_display, context->fmt->fbconfig, shareList, GL_TRUE, attribs); else if(context->fmt->visual) ctx = pglXCreateContext(gdi_display, context->fmt->visual, shareList, GL_TRUE); else /* Create a GLX Context for a pbuffer */ @@ -1589,7 +1580,6 @@ static BOOL x11drv_context_make_current( HDC draw_hdc, HDC read_hdc, void *priva else ret = pglXMakeContextCurrent( gdi_display, draw_gl->drawable, read_gl ? read_gl->drawable : 0, ctx->ctx ); if (ret) { - ctx->has_been_current = TRUE; ctx->hdc = draw_hdc; set_context_drawables( ctx, draw_gl, read_gl ); NtCurrentTeb()->glReserved2 = ctx; @@ -1606,55 +1596,6 @@ done: return ret; }
-/*********************************************************************** - * glxdrv_wglShareLists - */ -static BOOL x11drv_context_share(void *src_private, void *dst_private) -{ - struct x11drv_context *org = src_private, *dest = dst_private; - struct x11drv_context *keep, *clobber; - - TRACE("(%p, %p)\n", org, dest); - - /* Sharing of display lists works differently in GLX and WGL. In case of GLX it is done - * at context creation time but in case of WGL it is done using wglShareLists. - * In the past we tried to emulate wglShareLists by delaying GLX context creation until - * either a wglMakeCurrent or wglShareLists. This worked fine for most apps but it causes - * issues for OpenGL 3 because there wglCreateContextAttribsARB can fail in a lot of cases, - * so there delaying context creation doesn't work. - * - * The new approach is to create a GLX context in wglCreateContext / wglCreateContextAttribsARB - * and when a program requests sharing we recreate the destination or source context if it - * hasn't been made current and it hasn't shared display lists before. - */ - - if (!dest->has_been_current && !dest->sharing) - { - keep = org; - clobber = dest; - } - else if (!org->has_been_current && !org->sharing) - { - keep = dest; - clobber = org; - } - else - { - ERR("Could not share display lists because both of the contexts have already been current or shared\n"); - return FALSE; - } - - pglXDestroyContext(gdi_display, clobber->ctx); - clobber->ctx = create_glxcontext(gdi_display, clobber, keep->ctx); - TRACE("re-created context (%p) for Wine context %p (%s) sharing lists with ctx %p (%s)\n", - clobber->ctx, clobber, debugstr_fbconfig(clobber->fmt->fbconfig), - keep->ctx, debugstr_fbconfig(keep->fmt->fbconfig)); - - org->sharing = TRUE; - dest->sharing = TRUE; - return TRUE; -} - static void present_gl_drawable( HWND hwnd, HDC hdc, struct gl_drawable *gl, BOOL flush, BOOL gl_finish ) { HWND toplevel = NtUserGetAncestor( hwnd, GA_ROOT ); @@ -1723,6 +1664,7 @@ static BOOL x11drv_context_flush( void *private, HWND hwnd, HDC hdc, int interva static BOOL x11drv_context_create( HDC hdc, int format, void *share_private, const int *attribList, void **private ) { struct x11drv_context *ret, *hShareContext = share_private; + int glx_attribs[16] = {0}, *pContextAttribList = glx_attribs; int err = 0;
TRACE("(%p %d %p %p)\n", hdc, format, hShareContext, attribList); @@ -1733,7 +1675,6 @@ static BOOL x11drv_context_create( HDC hdc, int format, void *share_private, con ret->fmt = &pixel_formats[format - 1]; if (attribList) { - int *pContextAttribList = &ret->attribList[0]; ret->gl3_context = TRUE; /* attribList consists of pairs {token, value] terminated with 0 */ while(attribList[0] != 0) @@ -1745,13 +1686,11 @@ static BOOL x11drv_context_create( HDC hdc, int format, void *share_private, con pContextAttribList[0] = GLX_CONTEXT_MAJOR_VERSION_ARB; pContextAttribList[1] = attribList[1]; pContextAttribList += 2; - ret->numAttribs++; break; case WGL_CONTEXT_MINOR_VERSION_ARB: pContextAttribList[0] = GLX_CONTEXT_MINOR_VERSION_ARB; pContextAttribList[1] = attribList[1]; pContextAttribList += 2; - ret->numAttribs++; break; case WGL_CONTEXT_LAYER_PLANE_ARB: break; @@ -1759,25 +1698,21 @@ static BOOL x11drv_context_create( HDC hdc, int format, void *share_private, con pContextAttribList[0] = GLX_CONTEXT_FLAGS_ARB; pContextAttribList[1] = attribList[1]; pContextAttribList += 2; - ret->numAttribs++; break; case WGL_CONTEXT_OPENGL_NO_ERROR_ARB: pContextAttribList[0] = GLX_CONTEXT_OPENGL_NO_ERROR_ARB; pContextAttribList[1] = attribList[1]; pContextAttribList += 2; - ret->numAttribs++; break; case WGL_CONTEXT_PROFILE_MASK_ARB: pContextAttribList[0] = GLX_CONTEXT_PROFILE_MASK_ARB; pContextAttribList[1] = attribList[1]; pContextAttribList += 2; - ret->numAttribs++; break; case WGL_RENDERER_ID_WINE: pContextAttribList[0] = GLX_RENDERER_ID_MESA; pContextAttribList[1] = attribList[1]; pContextAttribList += 2; - ret->numAttribs++; break; default: ERR("Unhandled attribList pair: %#x %#x\n", attribList[0], attribList[1]); @@ -1787,7 +1722,8 @@ static BOOL x11drv_context_create( HDC hdc, int format, void *share_private, con }
X11DRV_expect_error(gdi_display, GLXErrorHandler, NULL); - ret->ctx = create_glxcontext(gdi_display, ret, hShareContext ? hShareContext->ctx : NULL); + ret->ctx = create_glxcontext( gdi_display, ret, hShareContext ? hShareContext->ctx : NULL, + attribList ? glx_attribs : NULL ); XSync(gdi_display, False); if ((err = X11DRV_check_error()) || !ret->ctx) { @@ -2082,7 +2018,6 @@ static const struct opengl_driver_funcs x11drv_driver_funcs = .p_context_create = x11drv_context_create, .p_context_destroy = x11drv_context_destroy, .p_context_copy = x11drv_context_copy, - .p_context_share = x11drv_context_share, .p_context_flush = x11drv_context_flush, .p_context_make_current = x11drv_context_make_current, .p_pbuffer_create = x11drv_pbuffer_create, diff --git a/include/wine/opengl_driver.h b/include/wine/opengl_driver.h index 0ee6862a2e6..efdf75380fe 100644 --- a/include/wine/opengl_driver.h +++ b/include/wine/opengl_driver.h @@ -143,7 +143,6 @@ struct opengl_driver_funcs BOOL (*p_context_create)(HDC,int,void*,const int*,void**); BOOL (*p_context_destroy)(void*); BOOL (*p_context_copy)(void*,void*,UINT); - BOOL (*p_context_share)(void*,void*); BOOL (*p_context_flush)(void*,HWND,HDC,int,BOOL); BOOL (*p_context_make_current)(HDC,HDC,void*); BOOL (*p_pbuffer_create)(HDC,int,BOOL,GLenum,GLenum,GLint,GLsizei*,GLsizei*,void **);