From 1c5c19817d234e53b00fbba26893870615af9cec Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 12 Nov 2023 15:58:52 +0100 Subject: [PATCH] Fewer arguments to `EpiIntegration::`update --- crates/eframe/src/native/epi_integration.rs | 12 +++++------ crates/eframe/src/native/run.rs | 22 ++++++++++++++------- crates/egui-winit/src/lib.rs | 2 ++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/crates/eframe/src/native/epi_integration.rs b/crates/eframe/src/native/epi_integration.rs index 1c0422409..fdc8e86f7 100644 --- a/crates/eframe/src/native/epi_integration.rs +++ b/crates/eframe/src/native/epi_integration.rs @@ -429,7 +429,9 @@ impl EpiIntegration { let saved_memory: egui::Memory = self.egui_ctx.memory(|mem| mem.clone()); self.egui_ctx .memory_mut(|mem| mem.set_everything_is_visible(true)); - let full_output = self.update(app, window, egui_winit, None, ViewportIdPair::ROOT); + + let raw_input = egui_winit.take_egui_input(window, ViewportIdPair::ROOT); + let full_output = self.update(app, window, None, raw_input); self.pending_full_output.append(full_output); // Handle it next frame self.egui_ctx.memory_mut(|mem| *mem = saved_memory); // We don't want to remember that windows were huge. self.egui_ctx.clear_animations(); @@ -486,9 +488,8 @@ impl EpiIntegration { &mut self, app: &mut dyn epi::App, window: &winit::window::Window, - egui_winit: &mut egui_winit::State, viewport_ui_cb: Option<&ViewportUiCallback>, - id_pair: ViewportIdPair, + mut raw_input: egui::RawInput, ) -> egui::FullOutput { let frame_start = std::time::Instant::now(); @@ -496,20 +497,17 @@ impl EpiIntegration { self.frame.info.window_info = read_window_info(window, self.egui_ctx.pixels_per_point(), &self.window_state); - let mut raw_input = egui_winit.take_egui_input(window, id_pair); raw_input.time = Some(self.beginning.elapsed().as_secs_f64()); - // Run user code: + // Run user code - this can create immediate viewports, so hold no locks over this! let full_output = self.egui_ctx.run(raw_input, |egui_ctx| { if let Some(viewport_ui_cb) = viewport_ui_cb { // Child viewport crate::profile_scope!("callback"); - debug_assert!(id_pair.this != ViewportId::ROOT); viewport_ui_cb(egui_ctx); } else { // Root viewport crate::profile_scope!("App::update"); - debug_assert_eq!(id_pair, ViewportIdPair::ROOT); app.update(egui_ctx, &mut self.frame); } }); diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 4d5b089f6..edc75fc76 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -1478,6 +1478,7 @@ mod glow_integration { let viewport = &mut *viewport.borrow_mut(); let window = window.borrow(); let egui_winit = viewport.egui_winit.as_mut().unwrap(); + let raw_input = egui_winit.take_egui_input(&window, viewport.id_pair); // ------------------------------------------------------------ // The update function, which could call immediate viewports, @@ -1492,9 +1493,8 @@ mod glow_integration { } = integration.update( app.as_mut(), &window, - egui_winit, viewport.viewport_ui_cb.as_deref(), - viewport.id_pair, + raw_input, ); // ------------------------------------------------------------ @@ -2426,6 +2426,16 @@ mod wgpu_integration { drop(shared_lock); // Release lock! + let raw_input = egui_winit.borrow_mut().as_mut().unwrap().take_egui_input( + &window.borrow(), + ViewportIdPair { + this: viewport_id, + parent: parent_id, + }, + ); + + // ------------------------------------------------------------ + // Runs the update, which could call immediate viewports, // so make sure we hold no locks here! egui::FullOutput { @@ -2437,14 +2447,12 @@ mod wgpu_integration { } = integration.update( app.as_mut(), &window.borrow(), - egui_winit.borrow_mut().as_mut().unwrap(), viewport_ui_cb.as_deref(), - ViewportIdPair { - this: viewport_id, - parent: parent_id, - }, + raw_input, ); + // ------------------------------------------------------------ + integration.handle_platform_output( &window.borrow(), viewport_id, diff --git a/crates/egui-winit/src/lib.rs b/crates/egui-winit/src/lib.rs index a33557504..7fc85be8e 100644 --- a/crates/egui-winit/src/lib.rs +++ b/crates/egui-winit/src/lib.rs @@ -182,6 +182,8 @@ impl State { window: &winit::window::Window, id_pair: ViewportIdPair, ) -> egui::RawInput { + crate::profile_function!(); + let pixels_per_point = self.pixels_per_point(); self.egui_input.time = Some(self.start_time.elapsed().as_secs_f64());