From a6d3eee63ad6073ec7d859f57ddef7059a822d3c Mon Sep 17 00:00:00 2001 From: Alexander Orzechowski Date: Wed, 12 Jul 2023 22:10:45 -0400 Subject: [PATCH] damage_ring: Wrap previous damage in struct We will add buffers here to track those --- include/wlr/types/wlr_damage_ring.h | 6 +++++- types/wlr_damage_ring.c | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/wlr/types/wlr_damage_ring.h b/include/wlr/types/wlr_damage_ring.h index d503a502a..3f1ad70ed 100644 --- a/include/wlr/types/wlr_damage_ring.h +++ b/include/wlr/types/wlr_damage_ring.h @@ -19,6 +19,10 @@ struct wlr_box; +struct wlr_damage_ring_entry { + pixman_region32_t damage; +}; + struct wlr_damage_ring { int32_t width, height; @@ -27,7 +31,7 @@ struct wlr_damage_ring { // 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; }; diff --git a/types/wlr_damage_ring.c b/types/wlr_damage_ring.c index 439cceb4b..361f4802f 100644 --- a/types/wlr_damage_ring.c +++ b/types/wlr_damage_ring.c @@ -15,14 +15,14 @@ void wlr_damage_ring_init(struct wlr_damage_ring *ring) { pixman_region32_init(&ring->current); 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) { pixman_region32_fini(&ring->current); 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; 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); } @@ -100,7 +100,7 @@ void wlr_damage_ring_get_buffer_damage(struct wlr_damage_ring *ring, // Accumulate damage from old buffers for (int i = 0; i < buffer_age - 1; ++i) { 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