From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/opengl.c | 10 ++++++++-- dlls/win32u/window.c | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index 43ecc9273f3..fae9a71c988 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -152,7 +152,7 @@ static void opengl_drawable_set_context( struct opengl_drawable *drawable, struc
static void opengl_drawable_flush( struct opengl_drawable *drawable, int interval, UINT flags ) { - if (!drawable->client) return; + if (!is_client_surface_window( drawable->client, 0 )) return;
if (InterlockedCompareExchange( &drawable->client->updated, 0, 1 )) flags |= GL_FLUSH_UPDATED; if (interval != drawable->interval) @@ -165,6 +165,12 @@ static void opengl_drawable_flush( struct opengl_drawable *drawable, int interva drawable->funcs->flush( drawable, flags ); }
+static BOOL opengl_drawable_swap( struct opengl_drawable *drawable ) +{ + if (!is_client_surface_window( drawable->client, 0 )) return FALSE; + return drawable->funcs->swap( drawable ); +} + #ifdef SONAME_LIBEGL
struct framebuffer_surface @@ -2029,7 +2035,7 @@ static BOOL win32u_wglSwapBuffers( HDC hdc ) else if (!(draw = get_window_current_drawable( hwnd ))) return FALSE;
opengl_drawable_flush( draw, interval, 0 ); - ret = draw->funcs->swap( draw ); + ret = opengl_drawable_swap( draw ); opengl_drawable_release( draw );
return ret; diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index bb6de9e065a..0363a00541f 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -359,7 +359,8 @@ BOOL is_client_surface_window( struct client_surface *surface, HWND hwnd )
if (!surface) return FALSE; pthread_mutex_lock( &surfaces_lock ); - ret = surface->hwnd == hwnd; + if (hwnd) ret = surface->hwnd == hwnd; + else ret = surface->hwnd != NULL; pthread_mutex_unlock( &surfaces_lock );
return ret;