damage_ring: Wrap previous damage in struct

We will add buffers here to track those
This commit is contained in:
Alexander Orzechowski 2023-07-12 22:10:45 -04:00 committed by Leo Li
parent 772b292560
commit a6d3eee63a
2 changed files with 9 additions and 5 deletions

View file

@ -19,6 +19,10 @@
struct wlr_box; struct wlr_box;
struct wlr_damage_ring_entry {
pixman_region32_t damage;
};
struct wlr_damage_ring { struct wlr_damage_ring {
int32_t width, height; int32_t width, height;
@ -27,7 +31,7 @@ struct wlr_damage_ring {
// private state // private state
pixman_region32_t previous[WLR_DAMAGE_RING_PREVIOUS_LEN]; struct wlr_damage_ring_entry previous[WLR_DAMAGE_RING_PREVIOUS_LEN];
size_t previous_idx; size_t previous_idx;
}; };

View file

@ -15,14 +15,14 @@ void wlr_damage_ring_init(struct wlr_damage_ring *ring) {
pixman_region32_init(&ring->current); pixman_region32_init(&ring->current);
for (size_t i = 0; i < WLR_DAMAGE_RING_PREVIOUS_LEN; ++i) { for (size_t i = 0; i < WLR_DAMAGE_RING_PREVIOUS_LEN; ++i) {
pixman_region32_init(&ring->previous[i]); pixman_region32_init(&ring->previous[i].damage);
} }
} }
void wlr_damage_ring_finish(struct wlr_damage_ring *ring) { void wlr_damage_ring_finish(struct wlr_damage_ring *ring) {
pixman_region32_fini(&ring->current); pixman_region32_fini(&ring->current);
for (size_t i = 0; i < WLR_DAMAGE_RING_PREVIOUS_LEN; ++i) { for (size_t i = 0; i < WLR_DAMAGE_RING_PREVIOUS_LEN; ++i) {
pixman_region32_fini(&ring->previous[i]); pixman_region32_fini(&ring->previous[i].damage);
} }
} }
@ -84,7 +84,7 @@ void wlr_damage_ring_rotate(struct wlr_damage_ring *ring) {
WLR_DAMAGE_RING_PREVIOUS_LEN - 1; WLR_DAMAGE_RING_PREVIOUS_LEN - 1;
ring->previous_idx %= WLR_DAMAGE_RING_PREVIOUS_LEN; ring->previous_idx %= WLR_DAMAGE_RING_PREVIOUS_LEN;
pixman_region32_copy(&ring->previous[ring->previous_idx], &ring->current); pixman_region32_copy(&ring->previous[ring->previous_idx].damage, &ring->current);
pixman_region32_clear(&ring->current); pixman_region32_clear(&ring->current);
} }
@ -100,7 +100,7 @@ void wlr_damage_ring_get_buffer_damage(struct wlr_damage_ring *ring,
// Accumulate damage from old buffers // Accumulate damage from old buffers
for (int i = 0; i < buffer_age - 1; ++i) { for (int i = 0; i < buffer_age - 1; ++i) {
int j = (ring->previous_idx + i) % WLR_DAMAGE_RING_PREVIOUS_LEN; int j = (ring->previous_idx + i) % WLR_DAMAGE_RING_PREVIOUS_LEN;
pixman_region32_union(damage, damage, &ring->previous[j]); pixman_region32_union(damage, damage, &ring->previous[j].damage);
} }
// Check the number of rectangles // Check the number of rectangles