mirror of
https://github.com/emilk/egui.git
synced 2026-09-01 14:20:04 -04:00
Fix crash when rendering a sync viewport in a sync viewport
This commit is contained in:
@@ -1084,9 +1084,9 @@ mod glow_integration {
|
|||||||
viewport_builder,
|
viewport_builder,
|
||||||
pair,
|
pair,
|
||||||
render,
|
render,
|
||||||
&mut c_glutin.borrow_mut(),
|
&c_glutin,
|
||||||
&c_gl,
|
&c_gl,
|
||||||
&mut c_painter.borrow_mut(),
|
&c_painter,
|
||||||
c_time,
|
c_time,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@@ -1110,15 +1110,17 @@ mod glow_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) + '_>,
|
||||||
glutin: &mut GlutinWindowContext,
|
glutin: &RefCell<GlutinWindowContext>,
|
||||||
gl: &glow::Context,
|
gl: &glow::Context,
|
||||||
painter: &mut egui_glow::Painter,
|
painter: &RefCell<egui_glow::Painter>,
|
||||||
time: Instant,
|
time: Instant,
|
||||||
) {
|
) {
|
||||||
let has_window = glutin.viewports.get(&pair).is_some();
|
let has_window = glutin.borrow().viewports.get(&pair).is_some();
|
||||||
|
|
||||||
// This will create a new native window if is needed
|
// This will create a new native window if is needed
|
||||||
if !has_window {
|
if !has_window {
|
||||||
|
let mut glutin = glutin.borrow_mut();
|
||||||
|
|
||||||
// Inherit parent icon if none
|
// Inherit parent icon if none
|
||||||
{
|
{
|
||||||
if viewport_builder.icon.is_none() && glutin.builders.get(&pair).is_none() {
|
if viewport_builder.icon.is_none() && glutin.builders.get(&pair).is_none() {
|
||||||
@@ -1158,7 +1160,7 @@ mod glow_integration {
|
|||||||
|
|
||||||
// Rendering the sync viewport
|
// Rendering the sync viewport
|
||||||
|
|
||||||
let window = glutin.viewports.get(&pair).cloned();
|
let window = glutin.borrow().viewports.get(&pair).cloned();
|
||||||
let Some(window) = window else { return };
|
let Some(window) = window else { return };
|
||||||
let output;
|
let output;
|
||||||
|
|
||||||
@@ -1176,6 +1178,9 @@ mod glow_integration {
|
|||||||
|
|
||||||
let clipped_primitives = egui_ctx.tessellate(output.shapes, pair.this);
|
let clipped_primitives = egui_ctx.tessellate(output.shapes, pair.this);
|
||||||
|
|
||||||
|
let mut glutin = glutin.borrow_mut();
|
||||||
|
let mut painter = painter.borrow_mut();
|
||||||
|
|
||||||
glutin.current_gl_context = Some(
|
glutin.current_gl_context = Some(
|
||||||
glutin
|
glutin
|
||||||
.current_gl_context
|
.current_gl_context
|
||||||
@@ -2139,10 +2144,10 @@ mod wgpu_integration {
|
|||||||
pair,
|
pair,
|
||||||
render,
|
render,
|
||||||
&c_viewports,
|
&c_viewports,
|
||||||
&mut c_builders.borrow_mut(),
|
&c_builders,
|
||||||
c_time,
|
c_time,
|
||||||
&mut c_painter.borrow_mut(),
|
&c_painter,
|
||||||
&mut c_windows_id.borrow_mut(),
|
&c_windows_id,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -2167,13 +2172,14 @@ mod wgpu_integration {
|
|||||||
pair: ViewportIdPair,
|
pair: ViewportIdPair,
|
||||||
render: Box<dyn FnOnce(&egui::Context) + '_>,
|
render: Box<dyn FnOnce(&egui::Context) + '_>,
|
||||||
c_viewports: &Viewports,
|
c_viewports: &Viewports,
|
||||||
builders: &mut HashMap<ViewportId, ViewportBuilder>,
|
builders: &RefCell<HashMap<ViewportId, ViewportBuilder>>,
|
||||||
c_time: Instant,
|
c_time: Instant,
|
||||||
c_painter: &mut egui_wgpu::winit::Painter,
|
c_painter: &RefCell<egui_wgpu::winit::Painter>,
|
||||||
c_windows_id: &mut HashMap<winit::window::WindowId, ViewportId>,
|
c_windows_id: &RefCell<HashMap<winit::window::WindowId, ViewportId>>,
|
||||||
) {
|
) {
|
||||||
// Creating a new native window if is needed
|
// Creating a new native window if is needed
|
||||||
if c_viewports.borrow().get(&pair).is_none() {
|
if c_viewports.borrow().get(&pair).is_none() {
|
||||||
|
let mut builders = builders.borrow_mut();
|
||||||
let mut _windows = c_viewports.borrow_mut();
|
let mut _windows = c_viewports.borrow_mut();
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -2205,8 +2211,8 @@ mod wgpu_integration {
|
|||||||
Self::init_window(
|
Self::init_window(
|
||||||
pair.this,
|
pair.this,
|
||||||
&viewport_builder,
|
&viewport_builder,
|
||||||
c_windows_id,
|
&mut c_windows_id.borrow_mut(),
|
||||||
c_painter,
|
&mut c_painter.borrow_mut(),
|
||||||
window,
|
window,
|
||||||
&mut state.borrow_mut(),
|
&mut state.borrow_mut(),
|
||||||
event_loop,
|
event_loop,
|
||||||
@@ -2227,6 +2233,8 @@ mod wgpu_integration {
|
|||||||
render(ctx);
|
render(ctx);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let mut c_painter = c_painter.borrow_mut();
|
||||||
|
|
||||||
if let Err(err) = pollster::block_on(c_painter.set_window(pair.this, Some(&win))) {
|
if let Err(err) = pollster::block_on(c_painter.set_window(pair.this, Some(&win))) {
|
||||||
log::error!(
|
log::error!(
|
||||||
"when rendering viewport_id: {}, set_window Error {err}",
|
"when rendering viewport_id: {}, set_window Error {err}",
|
||||||
|
|||||||
Reference in New Issue
Block a user