1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-01 22:30:03 -04:00

Fix crash on eframe wgpu when rendering a sync viewport in a sync viewport

Better names
This commit is contained in:
Konkitoman
2023-11-02 11:18:39 +02:00
parent 46febb4af1
commit 75e6d3c85d

View File

@@ -2177,7 +2177,7 @@ mod wgpu_integration {
viewport_builder, viewport_builder,
pair, pair,
render, render,
&mut viewports.borrow_mut(), &viewports,
&builders, &builders,
beginning, beginning,
&painter, &painter,
@@ -2209,14 +2209,14 @@ mod wgpu_integration {
mut viewport_builder: ViewportBuilder, mut viewport_builder: ViewportBuilder,
pair: ViewportIdPair, pair: ViewportIdPair,
render: Box<dyn FnOnce(&egui::Context) + '_>, render: Box<dyn FnOnce(&egui::Context) + '_>,
viewports: &mut Viewports, viewports: &RefCell<Viewports>,
builders: &RefCell<HashMap<ViewportId, ViewportBuilder>>, builders: &RefCell<HashMap<ViewportId, ViewportBuilder>>,
time: Instant, time: Instant,
painter: &RefCell<egui_wgpu::winit::Painter>, painter: &RefCell<egui_wgpu::winit::Painter>,
viewport_maps: &RefCell<HashMap<winit::window::WindowId, ViewportId>>, viewport_maps: &RefCell<HashMap<winit::window::WindowId, ViewportId>>,
) { ) {
// Creating a new native window if is needed // Creating a new native window if is needed
if viewports.get(&pair).is_none() { if viewports.borrow().get(&pair).is_none() {
let mut builders = builders.borrow_mut(); let mut builders = builders.borrow_mut();
{ {
@@ -2226,6 +2226,8 @@ mod wgpu_integration {
} }
} }
let mut viewports = viewports.borrow_mut();
let Viewport { window, state, .. } = let Viewport { window, state, .. } =
viewports.entry(pair.this).or_insert(Viewport { viewports.entry(pair.this).or_insert(Viewport {
window: None, window: None,
@@ -2259,12 +2261,12 @@ mod wgpu_integration {
// render sync viewport // render sync viewport
let window = viewports.get(&pair).cloned(); let viewport = viewports.borrow().get(&pair).cloned();
let Some(window) = window else { return }; let Some(viewport) = viewport else { return };
let output; let output;
let Some(winit_state) = &mut *window.state.borrow_mut() else { return }; let Some(winit_state) = &mut *viewport.state.borrow_mut() else { return };
let Some(win) = window.window else { return }; let Some(window) = viewport.window else { return };
let win = win.borrow(); let win = window.borrow();
let mut input = winit_state.take_egui_input(&win); let mut input = winit_state.take_egui_input(&win);
input.time = Some(time.elapsed().as_secs_f64()); input.time = Some(time.elapsed().as_secs_f64());
output = egui_ctx.run(input, pair, |ctx| { output = egui_ctx.run(input, pair, |ctx| {