diff --git a/types/buffer/client.c b/types/buffer/client.c index 6aa55386d..5bc670334 100644 --- a/types/buffer/client.c +++ b/types/buffer/client.c @@ -44,9 +44,44 @@ static bool client_buffer_get_dmabuf(struct wlr_buffer *buffer, return wlr_buffer_get_dmabuf(client_buffer->source, attribs); } +static bool client_buffer_get_shm(struct wlr_buffer *buffer, + struct wlr_shm_attributes *attribs) { + struct wlr_client_buffer *client_buffer = client_buffer_from_buffer(buffer); + + if (client_buffer->source == NULL) { + return false; + } + + return wlr_buffer_get_shm(client_buffer->source, attribs); +} + +static bool client_buffer_begin_data_ptr_access(struct wlr_buffer *buffer, uint32_t flags, + void **data, uint32_t *format, size_t *stride) { + struct wlr_client_buffer *client_buffer = client_buffer_from_buffer(buffer); + + if (client_buffer->source == NULL) { + return false; + } + + return wlr_buffer_begin_data_ptr_access(client_buffer->source, flags, data, format, stride); +} + +static void client_buffer_end_data_ptr_access(struct wlr_buffer *buffer) { + struct wlr_client_buffer *client_buffer = client_buffer_from_buffer(buffer); + + if (client_buffer->source == NULL) { + return; + } + + wlr_buffer_end_data_ptr_access(client_buffer->source); +} + static const struct wlr_buffer_impl client_buffer_impl = { .destroy = client_buffer_destroy, .get_dmabuf = client_buffer_get_dmabuf, + .get_shm = client_buffer_get_shm, + .begin_data_ptr_access = client_buffer_begin_data_ptr_access, + .end_data_ptr_access = client_buffer_end_data_ptr_access, }; static void client_buffer_handle_source_destroy(struct wl_listener *listener,