Documentation for <wlr/types/wlr_damage_ring.h>

Back to index

Table of contents

struct wlr_damage_ring

struct wlr_damage_ring {
	int32_t width, height;
	// Difference between the current buffer and the previous one
	pixman_region32_t current;
	// private state
	pixman_region32_t previous[];
	size_t previous_idx;


bool wlr_damage_ring_add(​struct wlr_damage_ring *ring, pixman_region32_t *damage);

Add a region to the current damage.

Returns true if the region intersects the ring bounds, false otherwise.


bool wlr_damage_ring_add_box(​struct wlr_damage_ring *ring, const struct wlr_box *box);

Add a box to the current damage.

Returns true if the box intersects the ring bounds, false otherwise.


void wlr_damage_ring_add_whole(​struct wlr_damage_ring *ring);

Damage the ring fully.


void wlr_damage_ring_finish(​struct wlr_damage_ring *ring);


void wlr_damage_ring_get_buffer_damage(​struct wlr_damage_ring *ring, int buffer_age, pixman_region32_t *damage);

Get accumulated damage, which is the difference between the current buffer and the buffer with age of buffer_age; in context of rendering, this is the region that needs to be redrawn.


void wlr_damage_ring_init(​struct wlr_damage_ring *ring);


void wlr_damage_ring_rotate(​struct wlr_damage_ring *ring);

Rotate the damage ring. This needs to be called after using the accumulated damage, e.g. after rendering to an output's back buffer.


void wlr_damage_ring_set_bounds(​struct wlr_damage_ring *ring, int32_t width, int32_t height);

Set ring bounds and damage the ring fully.

Next time damage will be added, it will be cropped to the ring bounds. If at least one of the dimensions is 0, bounds are removed.

By default, a damage ring doesn't have bounds.