aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wlr/types/wlr_buffer.h5
-rw-r--r--types/wlr_buffer.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/include/wlr/types/wlr_buffer.h b/include/wlr/types/wlr_buffer.h
index 14bb2a8d..84555899 100644
--- a/include/wlr/types/wlr_buffer.h
+++ b/include/wlr/types/wlr_buffer.h
@@ -104,6 +104,11 @@ struct wlr_client_buffer {
struct wlr_renderer;
/**
+ * Get a client buffer from a generic buffer. If the buffer isn't a client
+ * buffer, returns NULL.
+ */
+struct wlr_client_buffer *wlr_client_buffer_get(struct wlr_buffer *buffer);
+/**
* Check if a resource is a wl_buffer resource.
*/
bool wlr_resource_is_buffer(struct wl_resource *resource);
diff --git a/types/wlr_buffer.c b/types/wlr_buffer.c
index 2f914c12..29b26412 100644
--- a/types/wlr_buffer.c
+++ b/types/wlr_buffer.c
@@ -96,10 +96,18 @@ bool wlr_resource_get_buffer_size(struct wl_resource *resource,
static const struct wlr_buffer_impl client_buffer_impl;
+struct wlr_client_buffer *wlr_client_buffer_get(struct wlr_buffer *buffer) {
+ if (buffer->impl != &client_buffer_impl) {
+ return NULL;
+ }
+ return (struct wlr_client_buffer *)buffer;
+}
+
static struct wlr_client_buffer *client_buffer_from_buffer(
struct wlr_buffer *buffer) {
- assert(buffer->impl == &client_buffer_impl);
- return (struct wlr_client_buffer *) buffer;
+ struct wlr_client_buffer *client_buffer = wlr_client_buffer_get(buffer);
+ assert(client_buffer != NULL);
+ return client_buffer;
}
static void client_buffer_destroy(struct wlr_buffer *_buffer) {