Documentation for <wlr/types/wlr_buffer.h>

Back to index

Table of contents

struct wlr_buffer

struct wlr_buffer {
	const struct wlr_buffer_impl *impl;
	
	int width, height;
	
	bool dropped;
	size_t n_locks;
	bool accessing_data_ptr;
	
	struct {
		struct wl_signal destroy;
		struct wl_signal release;
	} events;
	
	struct wlr_addon_set addons;
};

A buffer containing pixel data.

A buffer has a single producer (the party who created the buffer) and multiple consumers (parties reading the buffer). When all consumers are done with the buffer, it gets released and can be re-used by the producer. When the producer and all consumers are done with the buffer, it gets destroyed.

wlr_buffer_begin_data_ptr_access()

bool wlr_buffer_begin_data_ptr_access(​struct wlr_buffer *buffer, uint32_t flags, void **data, uint32_t *format, size_t *stride);

enum wlr_buffer_cap

enum wlr_buffer_cap {
	WLR_BUFFER_CAP_DATA_PTR,
	WLR_BUFFER_CAP_DMABUF,
	WLR_BUFFER_CAP_SHM,
};

Buffer capabilities.

These bits indicate the features supported by a struct wlr_buffer. There is one bit per function in struct wlr_buffer_impl.

enum wlr_buffer_data_ptr_access_flag

enum wlr_buffer_data_ptr_access_flag {
	/**
	 * The buffer contents can be read back.
	 */
	WLR_BUFFER_DATA_PTR_ACCESS_READ,
	/**
	 * The buffer contents can be written to.
	 */
	WLR_BUFFER_DATA_PTR_ACCESS_WRITE,
};

Buffer data pointer access flags.

wlr_buffer_drop()

void wlr_buffer_drop(​struct wlr_buffer *buffer);

Unreference the buffer. This function should be called by producers when they are done with the buffer.

wlr_buffer_end_data_ptr_access()

void wlr_buffer_end_data_ptr_access(​struct wlr_buffer *buffer);

Indicate that a pointer to a buffer's underlying memory will no longer be used.

This function must be called after wlr_buffer_begin_data_ptr_access().

wlr_buffer_get_dmabuf()

bool wlr_buffer_get_dmabuf(​struct wlr_buffer *buffer, struct wlr_dmabuf_attributes *attribs);

wlr_buffer_get_shm()

bool wlr_buffer_get_shm(​struct wlr_buffer *buffer, struct wlr_shm_attributes *attribs);

wlr_buffer_lock()

struct wlr_buffer *wlr_buffer_lock(​struct wlr_buffer *buffer);

Lock the buffer. This function should be called by consumers to make sure the buffer can be safely read from. Once the consumer is done with the buffer, they should call wlr_buffer_unlock().

wlr_buffer_try_from_resource()

struct wlr_buffer *wlr_buffer_try_from_resource(​struct wl_resource *resource);

Transforms a struct wl_resource into a struct wlr_buffer and locks it. Once the caller is done with the buffer, they must call wlr_buffer_unlock().

The provided struct wl_resource must be a wl_buffer.

wlr_buffer_unlock()

void wlr_buffer_unlock(​struct wlr_buffer *buffer);

Unlock the buffer. This function should be called by consumers once they are done with the buffer.

struct wlr_client_buffer

struct wlr_client_buffer {
	struct wlr_buffer base;
	
	/**
	 * The buffer's texture, if any. A buffer will not have a texture if the
	 * client destroys the buffer before it has been released.
	 */
	struct wlr_texture *texture;
	/**
	 * The buffer this client buffer was created from. NULL if destroyed.
	 */
	struct wlr_buffer *source;
	
	struct {
		struct wl_listener source_destroy;
		struct wl_listener renderer_destroy;
		
		size_t n_ignore_locks;
	} WLR_PRIVATE;
};

A client buffer.

wlr_client_buffer_get()

struct wlr_client_buffer *wlr_client_buffer_get(​struct wlr_buffer *buffer);

Get a client buffer from a generic buffer. If the buffer isn't a client buffer, returns NULL.

struct wlr_shm_attributes

struct wlr_shm_attributes {
	int fd;
	uint32_t format; // FourCC code, see DRM_FORMAT_* in <drm_fourcc.h>
	int width, height;
	int stride; // Number of bytes between consecutive pixel lines
	off_t offset; // Offset in bytes of the first pixel in FD
};

Shared-memory attributes for a buffer.