diff --git a/include/wlr/types/wlr_buffer.h b/include/wlr/types/wlr_buffer.h index fb308e61..454c5ba0 100644 --- a/include/wlr/types/wlr_buffer.h +++ b/include/wlr/types/wlr_buffer.h @@ -32,6 +32,8 @@ struct wlr_buffer_impl { struct wlr_buffer { const struct wlr_buffer_impl *impl; + int width, height; + bool dropped; size_t n_locks; @@ -47,7 +49,7 @@ struct wlr_buffer { * they should call wlr_buffer_drop. */ void wlr_buffer_init(struct wlr_buffer *buffer, - const struct wlr_buffer_impl *impl); + const struct wlr_buffer_impl *impl, int width, int height); /** * Unreference the buffer. This function should be called by producers when * they are done with the buffer. diff --git a/types/wlr_buffer.c b/types/wlr_buffer.c index 1b0f53d8..2f914c12 100644 --- a/types/wlr_buffer.c +++ b/types/wlr_buffer.c @@ -7,9 +7,11 @@ #include "util/signal.h" void wlr_buffer_init(struct wlr_buffer *buffer, - const struct wlr_buffer_impl *impl) { + const struct wlr_buffer_impl *impl, int width, int height) { assert(impl->destroy); buffer->impl = impl; + buffer->width = width; + buffer->height = height; wl_signal_init(&buffer->events.destroy); wl_signal_init(&buffer->events.release); } @@ -212,6 +214,9 @@ struct wlr_client_buffer *wlr_client_buffer_import( return NULL; } + int width, height; + wlr_resource_get_buffer_size(resource, renderer, &width, &height); + struct wlr_client_buffer *buffer = calloc(1, sizeof(struct wlr_client_buffer)); if (buffer == NULL) { @@ -219,7 +224,7 @@ struct wlr_client_buffer *wlr_client_buffer_import( wl_resource_post_no_memory(resource); return NULL; } - wlr_buffer_init(&buffer->base, &client_buffer_impl); + wlr_buffer_init(&buffer->base, &client_buffer_impl, width, height); buffer->resource = resource; buffer->texture = texture; buffer->resource_released = resource_released;