wayland/glcontext: Sync surface state before swapping buffers

A side effect of eglSwapBuffers* is the EGL implementation calling
wl_surface_commit() on the corresponding Wayland surface. Thus, before
swapping buffers, we must synchronize the surface state (e.g. opaque
region, window geometry, etc) that changed since the last buffer swap.
Prior to this commit, this was done after eglSwapBuffers*, causing the
surface state to always correspond to the previous buffer state. As of
this commit this is now done before swapping the buffers, thus before
wl_surface_commit().
This commit is contained in:
Jonas Ådahl 2018-03-21 14:01:58 +08:00
parent 2a4ffd4a59
commit 1d5d46ff29

View File

@ -223,6 +223,8 @@ gdk_wayland_gl_context_end_frame (GdkDrawContext *draw_context,
egl_surface = gdk_wayland_surface_get_egl_surface (surface->impl_surface, egl_surface = gdk_wayland_surface_get_egl_surface (surface->impl_surface,
context_wayland->egl_config); context_wayland->egl_config);
gdk_wayland_surface_sync (surface);
if (display_wayland->have_egl_swap_buffers_with_damage && damage != NULL) if (display_wayland->have_egl_swap_buffers_with_damage && damage != NULL)
{ {
int i, j, n_rects = cairo_region_num_rectangles (damage); int i, j, n_rects = cairo_region_num_rectangles (damage);
@ -243,8 +245,6 @@ gdk_wayland_gl_context_end_frame (GdkDrawContext *draw_context,
} }
else else
eglSwapBuffers (display_wayland->egl_display, egl_surface); eglSwapBuffers (display_wayland->egl_display, egl_surface);
gdk_wayland_surface_sync (surface);
} }
static void static void