From e46b0018b99aef59be822ba09a1751888b6734da Mon Sep 17 00:00:00 2001 From: Garoven <95014675+Garoven@users.noreply.github.com> Date: Mon, 22 Jan 2024 12:13:28 +0100 Subject: [PATCH] Fix Android crash on resume (#3847) Added Viewport reinitialization and Window recreation for Android on resume event. Closes . https://github.com/emilk/egui/assets/95014675/7bc51ea5-3f63-4422-b5a0-ce8291612982 --- crates/eframe/src/native/wgpu_integration.rs | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/crates/eframe/src/native/wgpu_integration.rs b/crates/eframe/src/native/wgpu_integration.rs index 79e94e52..56847b92 100644 --- a/crates/eframe/src/native/wgpu_integration.rs +++ b/crates/eframe/src/native/wgpu_integration.rs @@ -139,6 +139,32 @@ impl WgpuWinitApp { } } + #[cfg(target_os = "android")] + fn recreate_window( + &self, + event_loop: &EventLoopWindowTarget, + running: &WgpuWinitRunning, + ) { + let SharedState { + egui_ctx, + viewports, + viewport_from_window, + painter, + .. + } = &mut *running.shared.borrow_mut(); + + initialize_or_update_viewport( + egui_ctx, + viewports, + ViewportIdPair::ROOT, + ViewportClass::Root, + self.native_options.viewport.clone(), + None, + None, + ) + .initialize_window(event_loop, egui_ctx, viewport_from_window, painter); + } + #[cfg(target_os = "android")] fn drop_window(&mut self) -> Result<(), egui_wgpu::WgpuError> { if let Some(running) = &mut self.running { @@ -386,6 +412,8 @@ impl WinitApp for WgpuWinitApp { log::debug!("Event::Resumed"); let running = if let Some(running) = &self.running { + #[cfg(target_os = "android")] + self.recreate_window(event_loop, running); running } else { let storage = epi_integration::create_storage(