diff --git a/src/programs/viewer.rs b/src/programs/viewer.rs index a8f48e7..8acb6c5 100644 --- a/src/programs/viewer.rs +++ b/src/programs/viewer.rs @@ -58,6 +58,8 @@ fn main() { // Set verbose flag verbose_log::set(matches.occurrences_of("verbose") > 0); + let mut capture_count = 0; + use std::f64::{MIN, MAX}; let mut bbox = BoundingBox3::new( Vector3::new(MAX, MAX, MAX), @@ -177,7 +179,25 @@ fn main() { camera.target.x(), camera.target.y(), camera.target.z()); println!("\tUp: ({}, {}, {})", camera.up.x(), camera.up.y(), camera.up.z()); - } + }, + + Event::WindowEvent { + event: WindowEvent::KeyboardInput { + input: glutin::KeyboardInput { + virtual_keycode: Some(VirtualKeyCode::C), + state: ElementState::Pressed, .. + }, .. + }, .. + + } => { + + // Make a screenshot + let size = renderer.gl_window().get_inner_size().unwrap(); + let cap = renderer.capture(size); + cap.save(format!("capture-{}.png", capture_count)).unwrap(); + capture_count += 1; + + }, _ => (), } diff --git a/src/renderer.rs b/src/renderer.rs index 0790f87..23a0c41 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -223,7 +223,8 @@ impl Renderer { /// Returns a RgbaImageData of the corresponding frame. pub fn capture_rgba_image_data(&self, dimensions: LogicalSize) -> RgbaImageData { - let dimensions: (u32, u32) = dimensions.into(); + let dpi = self.gl_window().get_hidpi_factor(); + let dimensions: (u32, u32) = dimensions.to_physical(dpi).into(); let rect = Rect { left: 0,