mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-18 06:47:31 -04:00
damage_ring: Wrap previous damage in struct
We will add buffers here to track those
This commit is contained in:
parent
772b292560
commit
a6d3eee63a
2 changed files with 9 additions and 5 deletions
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue