wlroots/types/scene
Simon Ser 5f6b9e5620 Replace wlr_client_buffer with wlr_surface_texture
wlr_client_buffer has a bad design: just because it needs some
ref'counting functionality, it's implemented as a wlr_buffer.
Its purpose is to allow compositors to obtain a frozen wlr_texture
to keep painting an old representation of the surface for an
arbitrary amount of time (e.g. during layout reconfigurations).

However a wlr_buffer lock means something else entirely, and abusing
it for ref'counting a texture leads to various issues. In particular,
wlr_surface checks the wlr_client_buffer lock count to decide whether
to mutate a texture on commit. This falls apart if the buffer is
locked for another purpose than freezing a surface texture (e.g.
locked by another wlroots helper). Additionally, wlr_client_buffer
forces backends to re-import and re-check the buffer each time the
client commits, since DMA-BUF wlr_client_buffers are destroyed and
re-created on each commit. wlr_client_buffer also doesn't properly
forward all wlr_buffer operations to the source buffer: some are
unimplemented, and the source buffer is not locked by wlr_client_buffer
thus may be destroyed anytime.

To fix all of this mess, introduce a new struct wlr_surface_texture
whose purpose is just to track whether a wlr_texture is frozen.
Compositors can lock the texture to freeze it. The wlr_buffer can be
accessed from wlr_surface_texture.buffer, or at surface commit time
from wlr_surface.current.buffer.
2024-03-12 14:56:32 +01:00
..
drag_icon.c Define _POSIX_C_SOURCE globally 2024-02-15 15:41:12 +01:00
layer_shell_v1.c Define _POSIX_C_SOURCE globally 2024-02-15 15:41:12 +01:00
output_layout.c scene: ignore duplicate wlr_scene_output_layout_add_output() calls 2024-02-20 11:04:46 +01:00
subsurface_tree.c wlr_scene: Introduce wlr_scene_subsurface_tree_set_clip 2023-11-14 17:27:08 +00:00
surface.c Replace wlr_client_buffer with wlr_surface_texture 2024-03-12 14:56:32 +01:00
wlr_scene.c scene: add scene_buffer_set_buffer_and_texture() 2024-03-12 14:56:05 +01:00
xdg_shell.c Define _POSIX_C_SOURCE globally 2024-02-15 15:41:12 +01:00