From f8d03c25a9d448d8ea12807496fce7a91ec89a93 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Thu, 10 Jul 2025 11:13:53 +0200 Subject: [PATCH] metal: clear damage before adding full damage --- src/backends/metal/video.rs | 1 + src/rect/region.rs | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/backends/metal/video.rs b/src/backends/metal/video.rs index 3fa455e1..5b6e4fe4 100644 --- a/src/backends/metal/video.rs +++ b/src/backends/metal/video.rs @@ -3332,6 +3332,7 @@ impl RenderBuffer { pub fn damage_full(&self) { let dmabuf = self.dev_bo.dmabuf(); let rect = Rect::new_sized_unchecked(0, 0, dmabuf.width, dmabuf.height); + self.damage_queue.clear_all(); self.damage_queue.damage(&[rect]); } } diff --git a/src/rect/region.rs b/src/rect/region.rs index 9679bc8a..2891f195 100644 --- a/src/rect/region.rs +++ b/src/rect/region.rs @@ -327,6 +327,13 @@ impl DamageQueue { data.clear(); } + pub fn clear_all(&self) { + let datas = unsafe { self.datas.get().deref_mut() }; + for data in datas { + data.clear(); + } + } + pub fn get(&self) -> Region { let data = unsafe { &self.datas.get().deref()[self.this] }; Region::from_rects2(data)