From bd5f553c3a33fd9de0f396634044117bd519342d Mon Sep 17 00:00:00 2001 From: wucke13 Date: Sun, 19 Jun 2022 22:49:06 +0200 Subject: [PATCH] Fix multiple partial updates of the same texture (#1338) Co-authored-by: Wanja Zaeske Co-authored-by: Emil Ernerfeldt --- epaint/src/textures.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/epaint/src/textures.rs b/epaint/src/textures.rs index 854a6d19..36f559a3 100644 --- a/epaint/src/textures.rs +++ b/epaint/src/textures.rs @@ -39,7 +39,7 @@ impl TextureManager { filter, }); - self.delta.set.insert(id, ImageDelta::full(image, filter)); + self.delta.set.push((id, ImageDelta::full(image, filter))); id } @@ -57,9 +57,10 @@ impl TextureManager { // whole update meta.size = delta.image.size(); meta.bytes_per_pixel = delta.image.bytes_per_pixel(); + // since we update the whole image, we can discard all old enqueued deltas + self.delta.set.retain(|(x, _)| x != &id); } - - self.delta.set.insert(id, delta); + self.delta.set.push((id, delta)); } else { crate::epaint_assert!(false, "Tried setting texture {id:?} which is not allocated"); } @@ -175,7 +176,7 @@ impl TextureMeta { #[must_use = "The painter must take care of this"] pub struct TexturesDelta { /// New or changed textures. Apply before painting. - pub set: AHashMap, + pub set: Vec<(TextureId, ImageDelta)>, /// Textures to free after painting. pub free: Vec,