|
|
@ -10,6 +10,14 @@
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
#define WLR_OUTPUT_DAMAGE_PREVIOUS_LEN 2
|
|
|
|
#define WLR_OUTPUT_DAMAGE_PREVIOUS_LEN 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Tracks damage for an output.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* When a `frame` event is emitted, `wlr_output_damage_make_current` should be
|
|
|
|
|
|
|
|
* called. If necessary, the output should be repainted and
|
|
|
|
|
|
|
|
* `wlr_output_damage_swap_buffers` should be called. No rendering should happen
|
|
|
|
|
|
|
|
* outside a `frame` event handler.
|
|
|
|
|
|
|
|
*/
|
|
|
|
struct wlr_output_damage {
|
|
|
|
struct wlr_output_damage {
|
|
|
|
struct wlr_output *output;
|
|
|
|
struct wlr_output *output;
|
|
|
|
|
|
|
|
|
|
|
@ -32,13 +40,33 @@ struct wlr_output_damage {
|
|
|
|
|
|
|
|
|
|
|
|
struct wlr_output_damage *wlr_output_damage_create(struct wlr_output *output);
|
|
|
|
struct wlr_output_damage *wlr_output_damage_create(struct wlr_output *output);
|
|
|
|
void wlr_output_damage_destroy(struct wlr_output_damage *output_damage);
|
|
|
|
void wlr_output_damage_destroy(struct wlr_output_damage *output_damage);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Makes the output rendering context current. `needs_swap` is set to true if
|
|
|
|
|
|
|
|
* `wlr_output_damage_swap_buffers` needs to be called. The region of the output
|
|
|
|
|
|
|
|
* that needs to be repainted is added to `damage`.
|
|
|
|
|
|
|
|
*/
|
|
|
|
bool wlr_output_damage_make_current(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 *needs_swap, pixman_region32_t *damage);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Swaps the output buffers. If the time of the frame isn't known, set `when` to
|
|
|
|
|
|
|
|
* NULL.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* Swapping buffers schedules a `frame` event.
|
|
|
|
|
|
|
|
*/
|
|
|
|
bool wlr_output_damage_swap_buffers(struct wlr_output_damage *output_damage,
|
|
|
|
bool wlr_output_damage_swap_buffers(struct wlr_output_damage *output_damage,
|
|
|
|
struct timespec *when, pixman_region32_t *damage);
|
|
|
|
struct timespec *when, pixman_region32_t *damage);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Accumulates damage and schedules a `frame` event.
|
|
|
|
|
|
|
|
*/
|
|
|
|
void wlr_output_damage_add(struct wlr_output_damage *output_damage,
|
|
|
|
void wlr_output_damage_add(struct wlr_output_damage *output_damage,
|
|
|
|
pixman_region32_t *damage);
|
|
|
|
pixman_region32_t *damage);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Damages the whole output and schedules a `frame` event.
|
|
|
|
|
|
|
|
*/
|
|
|
|
void wlr_output_damage_add_whole(struct wlr_output_damage *output_damage);
|
|
|
|
void wlr_output_damage_add_whole(struct wlr_output_damage *output_damage);
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Accumulates damage from a box and schedules a `frame` event.
|
|
|
|
|
|
|
|
*/
|
|
|
|
void wlr_output_damage_add_box(struct wlr_output_damage *output_damage,
|
|
|
|
void wlr_output_damage_add_box(struct wlr_output_damage *output_damage,
|
|
|
|
struct wlr_box *box);
|
|
|
|
struct wlr_box *box);
|
|
|
|
|
|
|
|
|
|
|
|