1
0
Fork 0
mutter-performance-source/cogl/winsys
Neil Roberts 45e18e0fb7 wayland: Don't delay resize if nothing is drawn since last swap
After discussing with Kristian Høgsberg it seems that the semantics of
wl_egl_window_resize is meant to be that if nothing has been drawn to
the framebuffer since the last swap then the resize will take effect
immediately. Cogl was previously always delaying the call to
wl_egl_window_resize until the next swap. That meant that if you
wanted to resize the surface you would have to call
cogl_wayland_onscreen_resize and then redundantly draw a frame at the
old size so that you can swap to get the resize to occur before
drawing again at the right size. Typically an application would decide
to resize at the start of its paint sequence so it should be able to
just resize immediately.

In current Mesa master it seems that there is a bug which means that
it won't actually delay a resize that is done mid-scene and instead it
will just discard what came before. To get consistent behaviour in
Cogl, the code to delay the call to wl_egl_window_resize is still used
if it determines that the buffer is dirty. There is an existing
_cogl_framebuffer_mark_mid_scene call which was being used to track
when the framebuffer becomes dirty since the last clear. This function
is now also used to track a new flag to track whether something has
been drawn since the last swap. It is called ‘mid_scene’ under the
assumption that this may also be useful for other things later.

cogl_framebuffer_clear has been slightly altered to always call
_cogl_framebuffer_mark_mid_scene even if it determines that it doesn't
need to clear because the framebuffer should still be considered to be
in the middle of a scene. Adding a quad to the journal now also begins
the scene.

This also fixes a potential bug where it looks like pending_dx/dy were
never cleared so they would always be accumulated even after the
resize is flushed.

Reviewed-by: Robert Bragg <robert@linux.intel.com>

(cherry picked from commit 945689a62903990a20abb87a85d2c96eb3985fe7)
2013-05-30 13:42:11 +01:00
..
cogl-texture-pixmap-x11-private.h texture: add width/height members to base CoglTexture 2013-01-22 17:48:17 +00:00
cogl-texture-pixmap-x11.c Allow lazy texture storage allocation 2013-01-22 17:48:17 +00:00
cogl-texture-pixmap-x11.h Fixes for --disable-glib 2013-01-22 17:48:05 +00:00
cogl-winsys-egl-android-private.h Add a separate winsys vtable for each EGL platform 2011-12-08 17:38:25 +00:00
cogl-winsys-egl-android.c Adds CoglError api 2013-01-22 17:47:39 +00:00
cogl-winsys-egl-feature-functions.h check the wayland buffer format when creating texture 2013-05-29 19:30:44 +01:00
cogl-winsys-egl-gdl-private.h Add a separate winsys vtable for each EGL platform 2011-12-08 17:38:25 +00:00
cogl-winsys-egl-gdl.c Adds CoglError api 2013-01-22 17:47:39 +00:00
cogl-winsys-egl-kms-private.h egl: Split out the KMS winsys as overrides of the EGL winsys 2011-12-09 17:29:49 +00:00
cogl-winsys-egl-kms.c poll: Add general way to hook into mainloop without fd 2013-05-28 21:36:03 +01:00
cogl-winsys-egl-null-private.h Add a separate winsys vtable for each EGL platform 2011-12-08 17:38:25 +00:00
cogl-winsys-egl-null.c Adds CoglError api 2013-01-22 17:47:39 +00:00
cogl-winsys-egl-private.h check the wayland buffer format when creating texture 2013-05-29 19:30:44 +01:00
cogl-winsys-egl-wayland-private.h Add a separate winsys vtable for each EGL platform 2011-12-08 17:38:25 +00:00
cogl-winsys-egl-wayland.c wayland: Don't delay resize if nothing is drawn since last swap 2013-05-30 13:42:11 +01:00
cogl-winsys-egl-x11-private.h Rename the EGL_X11 winsys to EGL_XLIB 2011-12-14 16:40:26 +00:00
cogl-winsys-egl-x11.c Associate check and dispatch funcs with poll fds 2013-04-30 16:39:31 +01:00
cogl-winsys-egl.c check the wayland buffer format when creating texture 2013-05-29 19:30:44 +01:00
cogl-winsys-glx-feature-functions.h onscreen: Add CoglFrameInfo and _add_frame_callback() api 2013-01-30 20:09:49 +00:00
cogl-winsys-glx-private.h Add -Wmissing-declarations to maintainer flags and fix problems 2012-03-06 18:45:44 +00:00
cogl-winsys-glx.c Adds initial Emscripten support to Cogl 2013-05-29 19:30:44 +01:00
cogl-winsys-private.h Add fence API 2013-05-28 21:36:03 +01:00
cogl-winsys-sdl-private.h Add -Wmissing-declarations to maintainer flags and fix problems 2012-03-06 18:45:44 +00:00
cogl-winsys-sdl.c Adds initial Emscripten support to Cogl 2013-05-29 19:30:44 +01:00
cogl-winsys-sdl2.c onscreen: Adds swap_buffers_with_damage api 2013-04-30 16:39:31 +01:00
cogl-winsys-stub-private.h Make stub winsys into a proper winsys backend 2011-06-01 20:44:41 +01:00
cogl-winsys-stub.c onscreen: Adds swap_buffers_with_damage api 2013-04-30 16:39:31 +01:00
cogl-winsys-wgl-feature-functions.h Add a WGL winsys 2011-05-10 17:58:41 +01:00
cogl-winsys-wgl-private.h Add -Wmissing-declarations to maintainer flags and fix problems 2012-03-06 18:45:44 +00:00
cogl-winsys-wgl.c win32: Automatically process windows messages when using a GMainLoop 2013-05-30 13:41:44 +01:00
cogl-winsys.c Adds CoglError api 2013-01-22 17:47:39 +00:00