From 7c263458268bc0013f243c589a9ced125d225db4 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 14 Apr 2021 19:11:35 +0200 Subject: buffer: introduce wlr_shm_client_buffer Introduce wlr_shm_client_buffer, which provides a wlr_buffer wrapper around wl_shm_buffer. Because the client can destroy the wl_buffer while we still are using it, we need to do some libwayland tricks to still be able to continue accessing its underlying storage. We need to reference the wl_shm_pool and save the data pointer. --- include/types/wlr_buffer.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'include') diff --git a/include/types/wlr_buffer.h b/include/types/wlr_buffer.h index 56b50f3d..8abb68d6 100644 --- a/include/types/wlr_buffer.h +++ b/include/types/wlr_buffer.h @@ -3,6 +3,28 @@ #include +struct wlr_shm_client_buffer { + struct wlr_buffer base; + + uint32_t format; + size_t stride; + + // The following fields are NULL if the client has destroyed the wl_buffer + struct wl_resource *resource; + struct wl_shm_buffer *shm_buffer; + + // This is used to keep the backing storage alive after the client has + // destroyed the wl_buffer + struct wl_shm_pool *saved_shm_pool; + void *saved_data; + + struct wl_listener resource_destroy; + struct wl_listener release; +}; + +struct wlr_shm_client_buffer *shm_client_buffer_create( + struct wl_resource *resource); + /** * Buffer capabilities. * -- cgit v1.2.3