diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 482bdc700..3535223c7 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -1139,6 +1139,21 @@ mod glow_integration { let glutin_ctx = self.running.read().as_ref().unwrap().glutin_ctx.clone(); let painter = self.running.read().as_ref().unwrap().painter.clone(); + // This onlt will happend when a viewport is sync + // That means that the viewport cannot be rendered by itself and needs his parent to be rendered + { + let win = glutin_ctx.read().windows.get(&viewport_id).unwrap().clone(); + if win.read().render.is_none() && viewport_id != 0 { + if let Some(win) = glutin_ctx.read().windows.get(&win.read().parent_id) { + win.read() + .window + .as_ref() + .map(|w| w.read().request_redraw()); + } + return vec![]; + } + } + let mut window_map = HashMap::default(); for (id, window) in glutin_ctx.read().windows.iter() { if let Some(win) = &window.read().window { diff --git a/examples/viewports/src/main.rs b/examples/viewports/src/main.rs index 45ca6385e..f8c17b7e1 100644 --- a/examples/viewports/src/main.rs +++ b/examples/viewports/src/main.rs @@ -26,6 +26,7 @@ fn main() { ViewportBuilder::default().with_title("Sync rendering!"), |ctx, viewport_id, parent_viewport_id| { egui::CentralPanel::default().show(ctx, |ui| { + ui.label(format!("Frame: {}", ui.ctx().frame_nr())); ui.horizontal(|ui| { ui.label("Viewport ID: "); ui.label(format!("{viewport_id}"))