From b26500e1b2d57ce67a753014da316e85aa931d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A8ir=20Noordermeer?= Date: Sun, 21 Jun 2020 12:24:41 +0200 Subject: [PATCH] Fix crash when window gets minimized (#332). Fixes #275 * Make sure aspect ratio is always valid * Do not render while window has an invalid size (e.g. window is minimized) --- src/main.rs | 6 +++++- src/render/mod.rs | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index f722be4..e366a62 100644 --- a/src/main.rs +++ b/src/main.rs @@ -352,6 +352,11 @@ fn main2() { game.tick(delta); game.server.tick(&mut game.renderer, delta); + // Check if window is valid, it might be minimized + if physical_width == 0 || physical_height == 0 { + return; + } + game.renderer.update_camera(physical_width, physical_height); game.server.world.compute_render_list(&mut game.renderer); game.chunk_builder.tick(&mut game.server.world, &mut game.renderer, version); @@ -364,7 +369,6 @@ fn main2() { ui_container.tick(&mut game.renderer, delta, width as f64, height as f64); game.renderer.tick(&mut game.server.world, delta, width, height, physical_width, physical_height); - if fps_cap > 0 && !vsync { let frame_time = now.elapsed(); let sleep_interval = Duration::from_millis(1000 / fps_cap as u64); diff --git a/src/render/mod.rs b/src/render/mod.rs index 0dff2fc..00c52e2 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -259,10 +259,13 @@ impl Renderer { self.height = height; gl::viewport(0, 0, width as i32, height as i32); + let fovy = cgmath::Rad::from(cgmath::Deg(90.0_f32)); + let aspect = (width as f32 / height as f32).max(1.0); + self.perspective_matrix = cgmath::Matrix4::from( cgmath::PerspectiveFov { - fovy: cgmath::Rad::from(cgmath::Deg(90f32)), - aspect: (width as f32 / height as f32), + fovy, + aspect, near: 0.1f32, far: 500.0f32, }