diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/yasl/yasl.h | 19 |
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. |
