wayland::buffer_t(3)

πŸ’… wayland::buffer_t(3) β€” bestie edition πŸŽ€

okay so this is wayland::buffer_t, and it's literally the content for a wl_surface. fr fr, that's the whole vibe. it's part of Wayland++ (iykyk) and yeah, we're gonna get into it πŸ’–


✨ SYNOPSIS ✨

#include <wayland-client-protocol.hpp>

it inherits from wayland::proxy_t β€” so it's got all that proxy energy going on. let's get into it πŸ¦‹


🌸 Public Types 🌸

one (1) public type, and she's iconic:

  • enum class wrapper_type with values standard, display, foreign, proxy_wrapper β€” full breakdown below, bestie, don't worry πŸ‘‘

🫢 Public Member Functions 🫢

okay here's the whole roster, no gatekeeping:

  • std::function< void()> & on_release () β€” compositor releases buffer
  • uint32_t get_id () const β€” Get the id of a proxy object.
  • std::string get_class () const β€” Get the interface name (class) of a proxy object.
  • uint32_t get_version () const β€” Get the protocol object version of a proxy object.
  • wrapper_type get_wrapper_type () const β€” Get the type of a proxy object.
  • void set_queue (event_queue_t queue) β€” Assign a proxy to an event queue.
  • wl_proxy * c_ptr () const β€” Get a pointer to the underlying C struct.
  • bool proxy_has_object () const β€” Check whether this wrapper actually wraps an object.
  • operator bool () const β€” Check whether this wrapper actually wraps an object.
  • bool operator== (const proxy_t &right) const β€” Check whether two wrappers refer to the same object.
  • bool operator!= (const proxy_t &right) const β€” Check whether two wrappers refer to different objects.
  • void proxy_release () β€” Release the wrapped object (if any), making this an empty wrapper.

πŸ¦‹ Detailed Description πŸ¦‹

okay so, content for a wl_surface. periodt. πŸ’…

a buffer provides the content for a wl_surface. Buffers are created through factory interfaces such as wl_shm, wp_linux_buffer_params (from the linux-dmabuf protocol extension) or similar. she has a width and a height and can be attached to a wl_surface, but the mechanism by which a client provides and updates the contents is defined by the buffer factory interface. that part's not on us, bestie πŸ™ˆ

and listen β€” if the buffer uses a format that has an alpha channel, the alpha channel is assumed to be premultiplied in the color channels unless otherwise specified. important detail, don't skip it ✨

Examples: egl.cpp πŸ‘‘

Definition at line 706 of file wayland-client-protocol.hpp.


🌈 Member Enumeration Documentation 🌈

enum class wayland::proxy_t::wrapper_type [strong], [inherited]

underlying wl_proxy type and properties of a proxy_t that affect construction, destruction, and event handling. here's the tea on each one β˜•

Enumerator:

  • standard β€” C pointer is a standard type compatible with wl_proxy*. Events are dispatched and it is destructed when the proxy_t is destructed. User data is set.
  • display β€” C pointer is a wl_display*. No events are dispatched, wl_display_disconnect is called when the proxy_t is destructed. User data is set.
  • foreign β€” C pointer is a standard type compatible with wl_proxy*, but another library owns it and it should not be touched in a way that could affect the operation of the other library. No events are dispatched, wl_proxy_destroy is not called when the proxy_t is destructed, user data is not touched. Consequently, there is no reference counting for the proxy_t. Lifetime of such wrappers should preferably be short to minimize the chance that the owning library decides to destroy the wl_proxy. 🚨 (lowkey important, don't mess with other libraries' stuff)
  • proxy_wrapper β€” C pointer is a wl_proxy* that was constructed with wl_proxy_create_wrapper. No events are dispatched, wl_proxy_wrapper_destroy is called when the proxy_t is destroyed. Reference counting is active. A reference to the proxy_t creating this proxy wrapper is held to extend its lifetime until after the proxy wrapper is destroyed.

Definition at line 117 of file wayland-client.hpp.


πŸ’œ Member Function Documentation πŸ’œ

wl_proxy * wayland::proxy_t::c_ptr () const [inherited]

Get a pointer to the underlying C struct.

Returns: The underlying wl_proxy wrapped by this proxy_t if it exists, otherwise an exception is thrown. 😭 (yeah, it'll just throw, be ready)


std::string wayland::proxy_t::get_class () const [inherited]

Get the interface name (class) of a proxy object.

Returns: The interface name of the object associated with the proxy


uint32_t wayland::proxy_t::get_id () const [inherited]

Get the id of a proxy object.

Returns: The id the object associated with the proxy


uint32_t wayland::proxy_t::get_version () const [inherited]

Get the protocol object version of a proxy object. Gets the protocol object version of a proxy object, or 0 if the proxy was created with unversioned API.

a returned value of 0 means that no version information is available, so the caller must make safe assumptions about the object's real version. ⚠️

display_t will always return version 0.

Returns: The protocol object version of the proxy or 0


wrapper_type wayland::proxy_t::get_wrapper_type () const [inline], [inherited]

Get the type of a proxy object.

Definition at line 303 of file wayland-client.hpp.


std::function< void()> & buffer_t::on_release ()

compositor releases buffer. Sent when this wl_buffer is no longer used by the compositor. The client is now free to reuse or destroy this buffer and its backing storage. πŸ”₯

here's the genuinely cool part: if a client receives a release event before the frame callback requested in the same wl_surface.commit that attaches this wl_buffer to a surface, then the client is immediately free to reuse the buffer and its backing storage, and does not need a second buffer for the next surface content update. Typically this is possible, when the compositor maintains a copy of the wl_surface contents, e.g. as a GL texture. This is an important optimization for GL(ES) compositors with wl_shm clients. πŸ’…βœ¨

Definition at line 1960 of file wayland-client-protocol.cpp.


wayland::proxy_t::operator bool () const [inherited]

Check whether this wrapper actually wraps an object.

Returns: true if there is an underlying object, false if this wrapper is empty


bool wayland::proxy_t::operator!= (const proxy_t & right) const [inherited]

Check whether two wrappers refer to different objects.


bool wayland::proxy_t::operator== (const proxy_t & right) const [inherited]

Check whether two wrappers refer to the same object.


bool wayland::proxy_t::proxy_has_object () const [inherited]

Check whether this wrapper actually wraps an object.

Returns: true if there is an underlying object, false if this wrapper is empty


void wayland::proxy_t::proxy_release () [inherited]

Release the wrapped object (if any), making this an empty wrapper. Note that display_t instances cannot be released this way. Attempts to do so are ignored. πŸ™ˆ

Examples: foreign_display.cpp


void wayland::proxy_t::set_queue (event_queue_t queue) [inherited]

Assign a proxy to an event queue.

Parameters: queue β€” The event queue that will handle this proxy

Assign proxy to event queue. Events coming from proxy will be queued in queue instead of the display's main queue.

See also: display_t::dispatch_queue().

Examples: proxy_wrapper.cpp


🌟 Author 🌟

Generated automatically by Doxygen for Wayland++ from the source code. yes bestie, the robots wrote this one πŸ€–πŸ’–


okay that's the whole page!! every flag, every return value, every little detail β€” she's all here, slay πŸ’…βœ¨

Version 1.0.1 🌸 Fri Mar 27 2026 13:15:00 β€” that's the version and date btw, writing it down for the group chat 🫢 mwah, go build something iconic with your buffers πŸ’œπŸŽ€

πŸ“¦ where this page comes from