diff options
Diffstat (limited to 'include/wlr/render')
-rw-r--r-- | include/wlr/render/interface.h | 2 | ||||
-rw-r--r-- | include/wlr/render/wlr_texture.h | 17 |
2 files changed, 19 insertions, 0 deletions
diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h index e8191ac2..e9159b79 100644 --- a/include/wlr/render/interface.h +++ b/include/wlr/render/interface.h @@ -52,6 +52,8 @@ void wlr_renderer_init(struct wlr_renderer *renderer, struct wlr_texture_impl { bool (*update_from_buffer)(struct wlr_texture *texture, struct wlr_buffer *buffer, const pixman_region32_t *damage); + bool (*read_pixels)(struct wlr_texture *texture, + const struct wlr_texture_read_pixels_options *options); void (*destroy)(struct wlr_texture *texture); }; diff --git a/include/wlr/render/wlr_texture.h b/include/wlr/render/wlr_texture.h index 87ed993f..c24cfaa9 100644 --- a/include/wlr/render/wlr_texture.h +++ b/include/wlr/render/wlr_texture.h @@ -13,6 +13,7 @@ #include <stdint.h> #include <wayland-server-core.h> #include <wlr/render/dmabuf.h> +#include <wlr/util/box.h> struct wlr_buffer; struct wlr_renderer; @@ -25,6 +26,22 @@ struct wlr_texture { struct wlr_renderer *renderer; }; +struct wlr_texture_read_pixels_options { + /** Memory location to read pixels into */ + void *data; + /** Format used for writing the pixel data */ + uint32_t format; + /** Stride in bytes for the data */ + uint32_t stride; + /** Destination offsets */ + uint32_t dst_x, dst_y; + /** Source box of the texture to read from. If empty, the full texture is assumed. */ + const struct wlr_box src_box; +}; + +bool wlr_texture_read_pixels(struct wlr_texture *texture, + const struct wlr_texture_read_pixels_options *options); + /** * Create a new texture from raw pixel data. `stride` is in bytes. The returned * texture is mutable. |