diff options
author | Neil Roberts <neil@linux.intel.com> | 2013-04-11 16:41:17 +0100 |
---|---|---|
committer | Neil Roberts <neil@linux.intel.com> | 2013-04-22 13:00:25 +0100 |
commit | 20d64cbb3937a3d418a9d91783827744d53a31a3 (patch) | |
tree | 9212adca2fdff021d76469153c42005f6cc6e3e5 | |
parent | efa3bd03c57dbfe46b4b821ac84dbae0fc35cdfb (diff) | |
download | cogl-20d64cbb3937a3d418a9d91783827744d53a31a3.tar.gz |
cogland: Handle damage events for non-shm buffers too
When a Wayland compositor gets a commit it only needs to redraw the
region specified by the pending damage event. Previously Cogland was
ignoring damage events for non-shm buffers and just always queuing a
redraw after a commit event. This patch changes it to queue a redraw
only in response to a damage event. In practice this doesn't really
make much difference because Cogland doesn't do anything clever to
handle updating a sub-region of the screen, but it more costly matches
the model a compositor should use.
Reviewed-by: Robert Bragg <robert@linux.intel.com>
(cherry picked from commit 15f00609e41f689234ee8d5b2f9e95fb74612d12)
-rw-r--r-- | examples/cogland.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/examples/cogland.c b/examples/cogland.c index 348001c7..0f82d602 100644 --- a/examples/cogland.c +++ b/examples/cogland.c @@ -336,15 +336,16 @@ cogland_queue_redraw (CoglandCompositor *compositor) } static void -shm_buffer_damaged (CoglandSurface *surface, - int32_t x, - int32_t y, - int32_t width, - int32_t height) +surface_damaged (CoglandSurface *surface, + int32_t x, + int32_t y, + int32_t width, + int32_t height) { struct wl_buffer *wayland_buffer = surface->buffer; - if (surface->texture) + if (surface->texture && + wl_buffer_is_shm (surface->buffer)) { CoglPixelFormat format; int stride = wl_shm_buffer_get_stride (wayland_buffer); @@ -381,6 +382,8 @@ shm_buffer_damaged (CoglandSurface *surface, stride, data); } + + cogland_queue_redraw (surface->compositor); } static void @@ -558,7 +561,6 @@ cogland_surface_commit (struct wl_client *client, /* wl_surface.damage */ if (surface->buffer && - wl_buffer_is_shm (surface->buffer) && surface->texture && !region_is_empty (&surface->pending.damage)) { @@ -574,11 +576,11 @@ cogland_surface_commit (struct wl_client *client, if (region->y1 < 0) region->y1 = 0; - shm_buffer_damaged (surface, - region->x1, - region->y1, - region->x2 - region->x1, - region->y2 - region->y1); + surface_damaged (surface, + region->x1, + region->y1, + region->x2 - region->x1, + region->y2 - region->y1); } region_init (&surface->pending.damage); @@ -586,8 +588,6 @@ cogland_surface_commit (struct wl_client *client, wl_list_insert_list (&compositor->frame_callbacks, &surface->pending.frame_callback_list); wl_list_init (&surface->pending.frame_callback_list); - - cogland_queue_redraw (compositor); } static void |