diff --git a/plugins/platforms/wayland/egl_wayland_backend.h b/plugins/platforms/wayland/egl_wayland_backend.h --- a/plugins/platforms/wayland/egl_wayland_backend.h +++ b/plugins/platforms/wayland/egl_wayland_backend.h @@ -109,6 +109,7 @@ WaylandBackend *m_backend; QVector m_outputs; bool m_havePlatformBase; + bool m_swapping = false; friend class EglWaylandTexture; }; diff --git a/plugins/platforms/wayland/egl_wayland_backend.cpp b/plugins/platforms/wayland/egl_wayland_backend.cpp --- a/plugins/platforms/wayland/egl_wayland_backend.cpp +++ b/plugins/platforms/wayland/egl_wayland_backend.cpp @@ -289,7 +289,10 @@ void EglWaylandBackend::presentOnSurface(EglWaylandOutput *output) { output->m_waylandOutput->surface()->setupFrameCallback(); - Compositor::self()->aboutToSwapBuffers(); + if (!m_swapping) { + m_swapping = true; + Compositor::self()->aboutToSwapBuffers(); + } if (supportsBufferAge()) { eglSwapBuffers(eglDisplay(), output->m_eglSurface); @@ -321,6 +324,7 @@ { eglWaitNative(EGL_CORE_NATIVE_ENGINE); startRenderTimer(); + m_swapping = false; return QRegion(); }