Fix frame counter

This commit is contained in:
Piotr Siuszko 2020-09-30 23:16:35 +02:00
parent 3fb9772db2
commit 07c7b4193f
1 changed files with 23 additions and 17 deletions

View File

@ -17,6 +17,7 @@ pub struct TimeStep {
delta_time: f32, delta_time: f32,
frame_count: u32, frame_count: u32,
frame_time: f32, frame_time: f32,
last_frame_count: u32,
} }
impl TimeStep { impl TimeStep {
@ -26,30 +27,35 @@ impl TimeStep {
delta_time: 0.0, delta_time: 0.0,
frame_count: 0, frame_count: 0,
frame_time: 0.0, frame_time: 0.0,
last_frame_count: 42,
} }
} }
pub fn delta(&mut self) -> f32 { pub fn update(&mut self) {
// delta
let current_time = Instant::now(); let current_time = Instant::now();
let delta = current_time.duration_since(self.last_time).as_micros() as f32 * 0.001; let delta = current_time.duration_since(self.last_time).as_micros() as f32 * 0.001;
self.last_time = current_time; self.last_time = current_time;
self.delta_time = delta; self.delta_time = delta;
delta
// frame counter
self.frame_count += 1;
self.frame_time += self.delta_time;
// per second
if self.frame_time >= 1000.0 {
self.last_frame_count = self.frame_count;
self.frame_count = 0;
self.frame_time = 0.0;
}
}
pub fn delta(&self) -> f32 {
self.delta_time
} }
// provides the framerate in FPS // provides the framerate in FPS
pub fn frame_rate(&mut self) -> Option<u32> { pub fn frame_rate(&self) -> u32 {
self.frame_count += 1; self.last_frame_count
self.frame_time += self.delta_time;
let tmp;
// per second
if self.frame_time >= 1000.0 {
tmp = self.frame_count;
self.frame_count = 0;
self.frame_time = 0.0;
return Some(tmp);
}
None
} }
} }
@ -202,8 +208,8 @@ impl Engine {
} }
} }
Event::MainEventsCleared => { Event::MainEventsCleared => {
let delta = timestep.delta(); timestep.update();
client.update(delta); client.update(timestep.delta());
// other application-specific logic // other application-specific logic
#[cfg(feature = "imgui_inspect")] #[cfg(feature = "imgui_inspect")]
platform platform
@ -283,7 +289,7 @@ impl Engine {
let ui = imgui.frame(); let ui = imgui.frame();
client.debug_draw(&ui); client.debug_draw(&ui);
use imgui::*; use imgui::*;
let fps = timestep.frame_rate().unwrap_or(0u32); let fps = timestep.frame_rate();
let size = [250.0, 110.0]; let size = [250.0, 110.0];
let offset = 20.0; let offset = 20.0;
Window::new(im_str!("EngineInfo")) Window::new(im_str!("EngineInfo"))