diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 3b5e5bb7c..8d77a8d7e 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -644,23 +644,7 @@ mod glow_integration { #[cfg(feature = "__screenshot")] if integration.egui_ctx.frame_nr() == 2 { if let Ok(path) = std::env::var("EFRAME_SCREENSHOT_TO") { - assert!( - path.ends_with(".png"), - "Expected EFRAME_SCREENSHOT_TO to end with '.png', got {path:?}" - ); - let screenshot = painter.borrow().read_screen_rgba(screen_size_in_pixels); - image::save_buffer( - &path, - screenshot.as_raw(), - screenshot.width() as u32, - screenshot.height() as u32, - image::ColorType::Rgba8, - ) - .unwrap_or_else(|err| { - panic!("Failed to save screenshot to {path:?}: {err}"); - }); - eprintln!("Screenshot saved to {path:?}."); - std::process::exit(0); + save_screeshot_and_exit(&path, painter, screen_size_in_pixels); } } @@ -696,6 +680,32 @@ mod glow_integration { } } + fn save_screeshot_and_exit( + path: &str, + painter: &mut Rc>, + screen_size_in_pixels: [u32; 2], + ) { + assert!( + path.ends_with(".png"), + "Expected EFRAME_SCREENSHOT_TO to end with '.png', got {path:?}" + ); + let screenshot = painter.borrow().read_screen_rgba(screen_size_in_pixels); + image::save_buffer( + path, + screenshot.as_raw(), + screenshot.width() as u32, + screenshot.height() as u32, + image::ColorType::Rgba8, + ) + .unwrap_or_else(|err| { + panic!("Failed to save screenshot to {path:?}: {err}"); + }); + eprintln!("Screenshot saved to {path:?}."); + + #[allow(clippy::exit)] + std::process::exit(0); + } + struct Viewport { gl_surface: Option>, window: Option>,