From 75e6d3c85d302097b246c511a184a1cb53a62b4d Mon Sep 17 00:00:00 2001 From: Konkitoman Date: Thu, 2 Nov 2023 11:18:39 +0200 Subject: [PATCH] Fix crash on eframe wgpu when rendering a sync viewport in a sync viewport Better names --- crates/eframe/src/native/run.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index d6af9718a..562fb4b14 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -2177,7 +2177,7 @@ mod wgpu_integration { viewport_builder, pair, render, - &mut viewports.borrow_mut(), + &viewports, &builders, beginning, &painter, @@ -2209,14 +2209,14 @@ mod wgpu_integration { mut viewport_builder: ViewportBuilder, pair: ViewportIdPair, render: Box, - viewports: &mut Viewports, + viewports: &RefCell, builders: &RefCell>, time: Instant, painter: &RefCell, viewport_maps: &RefCell>, ) { // 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(); { @@ -2226,6 +2226,8 @@ mod wgpu_integration { } } + let mut viewports = viewports.borrow_mut(); + let Viewport { window, state, .. } = viewports.entry(pair.this).or_insert(Viewport { window: None, @@ -2259,12 +2261,12 @@ mod wgpu_integration { // render sync viewport - let window = viewports.get(&pair).cloned(); - let Some(window) = window else { return }; + let viewport = viewports.borrow().get(&pair).cloned(); + let Some(viewport) = viewport else { return }; let output; - let Some(winit_state) = &mut *window.state.borrow_mut() else { return }; - let Some(win) = window.window else { return }; - let win = win.borrow(); + let Some(winit_state) = &mut *viewport.state.borrow_mut() else { return }; + let Some(window) = viewport.window else { return }; + let win = window.borrow(); let mut input = winit_state.take_egui_input(&win); input.time = Some(time.elapsed().as_secs_f64()); output = egui_ctx.run(input, pair, |ctx| {