From 486a481612db8136d1a7c192c556be1c0b5f5ab3 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 13 Apr 2021 11:14:16 +0200 Subject: [PATCH] surface: make wlr_surface.buffer a wlr_buffer --- include/wlr/types/wlr_surface.h | 2 +- types/wlr_surface.c | 27 +++++++++++++-------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/include/wlr/types/wlr_surface.h b/include/wlr/types/wlr_surface.h index 00db6cd8c..aeecf513d 100644 --- a/include/wlr/types/wlr_surface.h +++ b/include/wlr/types/wlr_surface.h @@ -92,7 +92,7 @@ struct wlr_surface { * have a buffer if it has never committed one, has committed a null buffer, * or something went wrong with uploading the buffer. */ - struct wlr_client_buffer *buffer; + struct wlr_buffer *buffer; /** * The buffer position, in surface-local units. */ diff --git a/types/wlr_surface.c b/types/wlr_surface.c index 54a814896..008672f1b 100644 --- a/types/wlr_surface.c +++ b/types/wlr_surface.c @@ -353,19 +353,19 @@ static void surface_apply_damage(struct wlr_surface *surface) { struct wl_resource *resource = surface->current.buffer_resource; if (resource == NULL) { // NULL commit - if (surface->buffer != NULL) { - wlr_buffer_unlock(&surface->buffer->base); - } + wlr_buffer_unlock(surface->buffer); surface->buffer = NULL; return; } - if (surface->buffer != NULL && surface->buffer->resource_released) { + struct wlr_client_buffer *client_buffer = surface->buffer != NULL ? + wlr_client_buffer_get(surface->buffer) : NULL; + if (client_buffer != NULL && client_buffer->resource_released) { struct wlr_client_buffer *updated_buffer = - wlr_client_buffer_apply_damage(surface->buffer, resource, + wlr_client_buffer_apply_damage(client_buffer, resource, &surface->buffer_damage); if (updated_buffer != NULL) { - surface->buffer = updated_buffer; + surface->buffer = &updated_buffer->base; return; } } @@ -377,10 +377,8 @@ static void surface_apply_damage(struct wlr_surface *surface) { return; } - if (surface->buffer != NULL) { - wlr_buffer_unlock(&surface->buffer->base); - } - surface->buffer = buffer; + wlr_buffer_unlock(surface->buffer); + surface->buffer = &buffer->base; } static void surface_update_opaque_region(struct wlr_surface *surface) { @@ -707,9 +705,7 @@ static void surface_handle_resource_destroy(struct wl_resource *resource) { pixman_region32_fini(&surface->buffer_damage); pixman_region32_fini(&surface->opaque_region); pixman_region32_fini(&surface->input_region); - if (surface->buffer != NULL) { - wlr_buffer_unlock(&surface->buffer->base); - } + wlr_buffer_unlock(surface->buffer); free(surface); } @@ -771,7 +767,10 @@ struct wlr_texture *wlr_surface_get_texture(struct wlr_surface *surface) { if (surface->buffer == NULL) { return NULL; } - return surface->buffer->texture; + struct wlr_client_buffer *client_buffer = + wlr_client_buffer_get(surface->buffer); + assert(client_buffer); + return client_buffer->texture; } bool wlr_surface_has_buffer(struct wlr_surface *surface) {