diff --git a/cogl/cogl/cogl-onscreen.c b/cogl/cogl/cogl-onscreen.c index 155445774..b0703e767 100644 --- a/cogl/cogl/cogl-onscreen.c +++ b/cogl/cogl/cogl-onscreen.c @@ -289,17 +289,15 @@ cogl_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen, _cogl_framebuffer_flush_journal (framebuffer); - if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_SYNC_FRAME))) - cogl_framebuffer_finish (framebuffer); - else - _cogl_context_update_sync (context); - cogl_framebuffer_discard_buffers (framebuffer, COGL_BUFFER_BIT_DEPTH | COGL_BUFFER_BIT_STENCIL); klass->swap_buffers_with_damage (onscreen, region, info, user_data); + if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_SYNC_FRAME))) + cogl_framebuffer_finish (framebuffer); + if (!cogl_context_has_winsys_feature (context, COGL_WINSYS_FEATURE_SYNC_AND_COMPLETE_EVENT)) { g_autoptr (CoglFrameInfo) pending_info = NULL; @@ -341,11 +339,6 @@ cogl_onscreen_swap_region (CoglOnscreen *onscreen, _cogl_framebuffer_flush_journal (framebuffer); - if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_SYNC_FRAME))) - cogl_framebuffer_finish (framebuffer); - else - _cogl_context_update_sync (context); - /* This should only be called if the winsys advertises COGL_WINSYS_FEATURE_SWAP_REGION */ g_return_if_fail (klass->swap_region); @@ -356,6 +349,9 @@ cogl_onscreen_swap_region (CoglOnscreen *onscreen, klass->swap_region (onscreen, region, info, user_data); + if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_SYNC_FRAME))) + cogl_framebuffer_finish (framebuffer); + if (!cogl_context_has_winsys_feature (context, COGL_WINSYS_FEATURE_SYNC_AND_COMPLETE_EVENT)) { g_autoptr (CoglFrameInfo) pending_info = NULL; diff --git a/cogl/cogl/winsys/cogl-onscreen-egl.c b/cogl/cogl/winsys/cogl-onscreen-egl.c index b2d2d86a2..4a3171276 100644 --- a/cogl/cogl/winsys/cogl-onscreen-egl.c +++ b/cogl/cogl/winsys/cogl-onscreen-egl.c @@ -236,6 +236,9 @@ cogl_onscreen_egl_swap_region (CoglOnscreen *onscreen, n_rectangles, egl_rectangles) == EGL_FALSE) g_warning ("Error reported by eglSwapBuffersRegion"); + + /* Update latest sync object after buffer swap */ + cogl_framebuffer_flush (framebuffer); } static void @@ -339,6 +342,9 @@ cogl_onscreen_egl_swap_buffers_with_damage (CoglOnscreen *onscreen, } else eglSwapBuffers (egl_renderer->edpy, priv->egl_surface); + + /* Update latest sync object after buffer swap */ + cogl_framebuffer_flush (framebuffer); } void