buffer: introduce wlr_buffer_get_data_ptr

The function has been place in an internal header for API stability
reasons.
This commit is contained in:
Simon Zeni 2021-02-16 20:22:28 -05:00 committed by Simon Ser
parent 9f33d8ad39
commit 0b9288ec0b
3 changed files with 25 additions and 0 deletions

View file

@ -0,0 +1,15 @@
#ifndef TYPES_WLR_BUFFER
#define TYPES_WLR_BUFFER
#include <wlr/types/wlr_buffer.h>
/**
* Access a pointer to the allocated data from the underlying implementation,
* and its stride.
*
* The returned pointer should be pointing to a valid memory location for read
* and write operations.
*/
bool buffer_get_data_ptr(struct wlr_buffer *buffer, void **data,
size_t *stride);
#endif

View file

@ -19,6 +19,8 @@ struct wlr_buffer_impl {
void (*destroy)(struct wlr_buffer *buffer); void (*destroy)(struct wlr_buffer *buffer);
bool (*get_dmabuf)(struct wlr_buffer *buffer, bool (*get_dmabuf)(struct wlr_buffer *buffer,
struct wlr_dmabuf_attributes *attribs); struct wlr_dmabuf_attributes *attribs);
bool (*get_data_ptr)(struct wlr_buffer *buffer, void **data,
size_t *stride);
}; };
/** /**

View file

@ -5,6 +5,7 @@
#include <wlr/types/wlr_linux_dmabuf_v1.h> #include <wlr/types/wlr_linux_dmabuf_v1.h>
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include "render/pixel_format.h" #include "render/pixel_format.h"
#include "types/wlr_buffer.h"
#include "util/signal.h" #include "util/signal.h"
void wlr_buffer_init(struct wlr_buffer *buffer, void wlr_buffer_init(struct wlr_buffer *buffer,
@ -65,6 +66,13 @@ bool wlr_buffer_get_dmabuf(struct wlr_buffer *buffer,
return buffer->impl->get_dmabuf(buffer, attribs); return buffer->impl->get_dmabuf(buffer, attribs);
} }
bool buffer_get_data_ptr(struct wlr_buffer *buffer, void **data,
size_t *size) {
if (!buffer->impl->get_data_ptr) {
return false;
}
return buffer->impl->get_data_ptr(buffer, data, size);
}
bool wlr_resource_is_buffer(struct wl_resource *resource) { bool wlr_resource_is_buffer(struct wl_resource *resource) {
return strcmp(wl_resource_get_class(resource), wl_buffer_interface.name) == 0; return strcmp(wl_resource_get_class(resource), wl_buffer_interface.name) == 0;