From c56d09a2e506a953852986956c20bd5cfc8d959c Mon Sep 17 00:00:00 2001 From: Konkitoman Date: Thu, 27 Jul 2023 18:22:43 +0300 Subject: [PATCH] Fix WGPU implementation memory leak Now unused surfaces will be cleared --- crates/eframe/src/native/run.rs | 1 + crates/egui-wgpu/src/winit.rs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 70d542d13..f2fff410b 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -1909,6 +1909,7 @@ mod wgpu_integration { windows.retain(|id, _| active_viewports_ids.contains(id)); windows_id.retain(|_, id| active_viewports_ids.contains(id)); + painter.clean_surfaces(active_viewports_ids); let mut control_flow = vec![EventResult::Wait]; for repaint_after in repaint_after { diff --git a/crates/egui-wgpu/src/winit.rs b/crates/egui-wgpu/src/winit.rs index a41fdf4c7..00b2a6bf0 100644 --- a/crates/egui-wgpu/src/winit.rs +++ b/crates/egui-wgpu/src/winit.rs @@ -615,6 +615,11 @@ impl Painter { screenshot } + pub fn clean_surfaces(&mut self, avalibile_viewports: Vec) { + self.surfaces + .retain(|id, _| avalibile_viewports.contains(id)) + } + #[allow(clippy::unused_self)] pub fn destroy(&mut self) { // TODO(emilk): something here?