mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2025-12-27 19:50:12 +01:00
backend-wayland: Add renderbuffer's discarded event support
Signed-off-by: Loïc Molinari <loic.molinari@collabora.com>
This commit is contained in:
parent
a2e6086bc6
commit
c7ec967d12
1 changed files with 19 additions and 10 deletions
|
|
@ -295,6 +295,22 @@ buffer_release(void *data, struct wl_buffer *buffer)
|
|||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
wayland_rb_discarded_cb(weston_renderbuffer_t renderbuffer, void *data)
|
||||
{
|
||||
struct wayland_shm_buffer *sb = data;
|
||||
const struct weston_renderer *renderer;
|
||||
|
||||
if (sb->renderbuffer) {
|
||||
renderer = sb->output->backend->compositor->renderer;
|
||||
renderer->destroy_renderbuffer(sb->renderbuffer);
|
||||
sb->renderbuffer = NULL;
|
||||
}
|
||||
sb->output = NULL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static const struct wl_buffer_listener buffer_listener = {
|
||||
buffer_release
|
||||
};
|
||||
|
|
@ -405,7 +421,9 @@ wayland_output_get_shm_buffer(struct wayland_output *output)
|
|||
pixman->create_image_from_ptr(&output->base, pfmt,
|
||||
area.width, area.height,
|
||||
(uint32_t *)(data + area.y * stride) + area.x,
|
||||
stride, NULL, NULL);
|
||||
stride,
|
||||
wayland_rb_discarded_cb,
|
||||
sb);
|
||||
|
||||
return sb;
|
||||
}
|
||||
|
|
@ -662,20 +680,11 @@ wayland_backend_destroy_output_surface(struct wayland_output *output)
|
|||
static void
|
||||
wayland_output_destroy_shm_buffers(struct wayland_output *output)
|
||||
{
|
||||
const struct weston_renderer *renderer =
|
||||
output->base.compositor->renderer;
|
||||
struct wayland_shm_buffer *buffer, *next;
|
||||
|
||||
/* Throw away any remaining SHM buffers */
|
||||
wl_list_for_each_safe(buffer, next, &output->shm.free_buffers, free_link)
|
||||
wayland_shm_buffer_destroy(buffer);
|
||||
wl_list_for_each(buffer, &output->shm.buffers, link) {
|
||||
if (buffer->renderbuffer) {
|
||||
renderer->destroy_renderbuffer(buffer->renderbuffer);
|
||||
buffer->renderbuffer = NULL;
|
||||
}
|
||||
buffer->output = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue