wayland-backend: Fully damage initial SHM buffer

In order to start the repaint loop, the Wayland backend tries to damage
the full SHM buffer, but doesn't actually damage the full area if we
have a frame.

Store the buffer's width and height alongside the buffer itself, so we
can damage the full area when required.

Signed-off-by: Daniel Stone <daniels@collabora.com>
dev
Daniel Stone 5 years ago
parent 4505f81111
commit cb481a66cd
  1. 7
      libweston/backend-wayland/wayland.c

@ -180,6 +180,8 @@ struct wayland_shm_buffer {
struct wl_buffer *buffer; struct wl_buffer *buffer;
void *data; void *data;
size_t size; size_t size;
int width;
int height;
pixman_region32_t damage; /**< in global coords */ pixman_region32_t damage; /**< in global coords */
int frame_damaged; int frame_damaged;
@ -339,6 +341,8 @@ wayland_output_get_shm_buffer(struct wayland_output *output)
sb->frame_damaged = 1; sb->frame_damaged = 1;
sb->data = data; sb->data = data;
sb->width = width;
sb->height = height;
sb->size = height * stride; sb->size = height * stride;
pool = wl_shm_create_pool(shm, fd, sb->size); pool = wl_shm_create_pool(shm, fd, sb->size);
@ -410,8 +414,7 @@ draw_initial_frame(struct wayland_output *output)
wl_surface_attach(output->parent.surface, sb->buffer, 0, 0); wl_surface_attach(output->parent.surface, sb->buffer, 0, 0);
wl_surface_damage(output->parent.surface, 0, 0, wl_surface_damage(output->parent.surface, 0, 0,
output->base.current_mode->width, sb->width, sb->height);
output->base.current_mode->height);
} }
#ifdef ENABLE_EGL #ifdef ENABLE_EGL

Loading…
Cancel
Save