Add a weston_buffer structure to replace wl_buffer
This commit adds a weston_buffer structure to replace wl_buffer. This way
we can hold onto buffers by just their resource. In order to do this, the
every renderer.attach function has to fill in the weston_buffer.width and
weston_buffer.height fields.
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
diff --git a/src/screenshooter.c b/src/screenshooter.c
index 1fdfc9a..be2e34f 100644
--- a/src/screenshooter.c
+++ b/src/screenshooter.c
@@ -46,7 +46,7 @@
struct screenshooter_frame_listener {
struct wl_listener listener;
- struct wl_buffer *buffer;
+ struct weston_buffer *buffer;
struct wl_resource *resource;
};
@@ -140,9 +140,9 @@
0, 0, output->current->width,
output->current->height);
- stride = wl_shm_buffer_get_stride(l->buffer);
+ stride = wl_shm_buffer_get_stride(l->buffer->shm_buffer);
- d = wl_shm_buffer_get_data(l->buffer);
+ d = wl_shm_buffer_get_data(l->buffer->shm_buffer);
s = pixels + stride * (l->buffer->height - 1);
switch (compositor->read_format) {
@@ -178,10 +178,15 @@
struct weston_output *output =
wl_resource_get_user_data(output_resource);
struct screenshooter_frame_listener *l;
- struct wl_buffer *buffer = buffer_resource->data;
+ struct weston_buffer *buffer =
+ weston_buffer_from_resource(buffer_resource);
- if (!wl_buffer_is_shm(buffer))
+ if (!wl_shm_buffer_get(buffer->resource))
return;
+
+ buffer->shm_buffer = wl_shm_buffer_get(buffer->resource);
+ buffer->width = wl_shm_buffer_get_width(buffer->shm_buffer);
+ buffer->height = wl_shm_buffer_get_height(buffer->shm_buffer);
if (buffer->width < output->current->width ||
buffer->height < output->current->height)