summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/yasl/yasl.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/yasl/yasl.h b/include/yasl/yasl.h
index 7c9bfbd..5946816 100644
--- a/include/yasl/yasl.h
+++ b/include/yasl/yasl.h
@@ -777,6 +777,25 @@ YASL_API bool yasl_surface_present(struct yasl_surface *s, const struct yasl_fra
*/
YASL_API bool yasl_surface_poll_event(struct yasl_surface *s, struct yasl_event *ev);
/**
+ * Copy the last frame presented from the surface's CPU target.
+ * @param s Surface.
+ * @param out Output for size->x * size->y premultiplied ARGB8888 pixels with
+ * tightly packed rows, or NULL when cap is zero.
+ * @param cap Capacity of out in pixels.
+ * @param size Required output: the frame extent in device pixels, or zero when
+ * no frame is available.
+ * @return true if copied. false leaves out unchanged; when *size is nonzero,
+ * out was too small, so allocate size->x * size->y pixels and call again.
+ * A frame is available from a successful yasl_surface_present() until the
+ * next draw callback starts, and again once that draw presents. After a draw
+ * that does not present or a resize that replaces the target, no frame may be
+ * available; native rendering never has one. Call outside draw callbacks. This copies YASL's frame, not
+ * the composited screen: decorations, other windows, and color conversion are
+ * not included.
+ */
+YASL_API bool yasl_surface_read_pixels(struct yasl_surface *s, uint32_t *out, size_t cap,
+ struct yasl_vector2i *size);
+/**
* Select absolute or relative (locked) pointer input for a surface.
* @param s Surface.
* @param mode YASL_POINTER_NORMAL or YASL_POINTER_RELATIVE.