From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/opengl.c | 14 ++++++++++---- dlls/winemac.drv/opengl.c | 16 ---------------- dlls/winex11.drv/opengl.c | 16 ---------------- 3 files changed, 10 insertions(+), 36 deletions(-)
diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index 65318895a65..f89f16c2f48 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -246,9 +246,12 @@ void opengl_drawable_release( struct opengl_drawable *drawable ) const struct opengl_funcs *funcs = &display_funcs; const struct egl_platform *egl = &display_egl;
- pthread_mutex_lock( &drawables_lock ); - opengl_drawable_detach( drawable ); - pthread_mutex_unlock( &drawables_lock ); + if (drawable->hwnd) + { + pthread_mutex_lock( &drawables_lock ); + opengl_drawable_detach( drawable ); + pthread_mutex_unlock( &drawables_lock ); + }
drawable->funcs->destroy( drawable ); if (drawable->surface) funcs->p_eglDestroySurface( egl->display, drawable->surface ); @@ -258,6 +261,8 @@ void opengl_drawable_release( struct opengl_drawable *drawable )
static void opengl_drawable_flush( struct opengl_drawable *drawable, int interval, UINT flags ) { + if (!drawable->hwnd) return; + if (InterlockedCompareExchange( &drawable->updated, 0, 1 )) flags |= GL_FLUSH_UPDATED; if (interval != drawable->interval) { @@ -1658,7 +1663,8 @@ static BOOL win32u_wglSwapBuffers( HDC hdc )
if (!(draw = get_dc_opengl_drawable( draw_hdc, FALSE ))) return FALSE; opengl_drawable_flush( draw, interval, 0 ); - ret = draw->funcs->swap( draw ); + if (!draw->hwnd) ret = FALSE; /* pbuffer, nothing to do */ + else ret = draw->funcs->swap( draw ); opengl_drawable_release( draw );
return ret; diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c index 57b2ed23dd9..4d9780c7eb3 100644 --- a/dlls/winemac.drv/opengl.c +++ b/dlls/winemac.drv/opengl.c @@ -2381,19 +2381,6 @@ static void macdrv_pbuffer_destroy(struct opengl_drawable *base) CGLReleasePBuffer(gl->pbuffer); }
-static void macdrv_pbuffer_detach(struct opengl_drawable *base) -{ -} - -static void macdrv_pbuffer_flush(struct opengl_drawable *base, UINT flags) -{ -} - -static BOOL macdrv_pbuffer_swap(struct opengl_drawable *base) -{ - return FALSE; -} - static BOOL macdrv_make_current(struct opengl_drawable *draw_base, struct opengl_drawable *read_base, void *private) { struct gl_drawable *draw = impl_from_opengl_drawable(draw_base), *read = impl_from_opengl_drawable(read_base); @@ -2973,7 +2960,4 @@ static const struct opengl_drawable_funcs macdrv_surface_funcs = static const struct opengl_drawable_funcs macdrv_pbuffer_funcs = { .destroy = macdrv_pbuffer_destroy, - .detach = macdrv_pbuffer_detach, - .flush = macdrv_pbuffer_flush, - .swap = macdrv_pbuffer_swap, }; diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index 547608aa79f..4d100088030 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -1428,19 +1428,6 @@ static void x11drv_pbuffer_destroy( struct opengl_drawable *base ) if (gl->drawable) pglXDestroyPbuffer( gdi_display, gl->drawable ); }
-static void x11drv_pbuffer_detach( struct opengl_drawable *base ) -{ -} - -static void x11drv_pbuffer_flush( struct opengl_drawable *base, UINT flags ) -{ -} - -static BOOL x11drv_pbuffer_swap( struct opengl_drawable *base ) -{ - return FALSE; -} - static BOOL x11drv_pbuffer_updated( HDC hdc, struct opengl_drawable *base, GLenum cube_face, GLint mipmap_level ) { return GL_TRUE; @@ -1669,9 +1656,6 @@ static const struct opengl_drawable_funcs x11drv_surface_funcs = static const struct opengl_drawable_funcs x11drv_pbuffer_funcs = { .destroy = x11drv_pbuffer_destroy, - .detach = x11drv_pbuffer_detach, - .flush = x11drv_pbuffer_flush, - .swap = x11drv_pbuffer_swap, };
static const struct opengl_drawable_funcs x11drv_egl_surface_funcs =