From ec837e3c9e08a8334fa7093d7f39af2a2f11e122 Mon Sep 17 00:00:00 2001 From: emersion Date: Sun, 11 Feb 2018 12:49:30 +0100 Subject: Introduce wlr_output_damage --- include/wlr/types/wlr_output_damage.h | 45 +++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 include/wlr/types/wlr_output_damage.h (limited to 'include/wlr') diff --git a/include/wlr/types/wlr_output_damage.h b/include/wlr/types/wlr_output_damage.h new file mode 100644 index 00000000..eadbff29 --- /dev/null +++ b/include/wlr/types/wlr_output_damage.h @@ -0,0 +1,45 @@ +#ifndef WLR_TYPES_WLR_OUTPUT_DAMAGE_H +#define WLR_TYPES_WLR_OUTPUT_DAMAGE_H + +#include + +/** + * Damage tracking requires to keep track of previous frames' damage. To allow + * damage tracking to work with triple buffering, a history of two frames is + * required. + */ +#define WLR_OUTPUT_DAMAGE_PREVIOUS_LEN 2 + +struct wlr_output_damage { + struct wlr_output *output; + + pixman_region32_t current; // in output-local coordinates + + // circular queue for previous damage + pixman_region32_t previous[WLR_OUTPUT_DAMAGE_PREVIOUS_LEN]; + size_t previous_idx; + + struct { + struct wl_signal frame; + struct wl_signal destroy; + } events; + + struct wl_listener output_destroy; + struct wl_listener output_mode; + struct wl_listener output_needs_swap; + struct wl_listener output_frame; +}; + +struct wlr_output_damage *wlr_output_damage_create(struct wlr_output *output); +void wlr_output_damage_destroy(struct wlr_output_damage *output_damage); +bool wlr_output_damage_make_current(struct wlr_output_damage *output_damage, + bool *needs_swap, pixman_region32_t *damage); +bool wlr_output_damage_swap_buffers(struct wlr_output_damage *output_damage, + struct timespec *when, pixman_region32_t *damage); +void wlr_output_damage_add(struct wlr_output_damage *output_damage, + pixman_region32_t *damage); +void wlr_output_damage_add_whole(struct wlr_output_damage *output_damage); +void wlr_output_damage_add_box(struct wlr_output_damage *output_damage, + struct wlr_box *box); + +#endif -- cgit v1.2.3