From c575dec15b9219cffdb4188b445590fe15190eb9 Mon Sep 17 00:00:00 2001 From: Joonas Javanainen Date: Tue, 7 Jul 2020 23:07:56 +0300 Subject: [PATCH] Change update_delta_time to accept a Duration Fixes #333 --- imgui-examples/examples/support/mod.rs | 6 +++++- imgui-gfx-examples/examples/support/mod.rs | 4 +++- src/io.rs | 7 ++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/imgui-examples/examples/support/mod.rs b/imgui-examples/examples/support/mod.rs index 344980a..ca36a72 100644 --- a/imgui-examples/examples/support/mod.rs +++ b/imgui-examples/examples/support/mod.rs @@ -95,7 +95,11 @@ impl System { let mut last_frame = Instant::now(); event_loop.run(move |event, _, control_flow| match event { - Event::NewEvents(_) => last_frame = imgui.io_mut().update_delta_time(last_frame), + Event::NewEvents(_) => { + let now = Instant::now(); + imgui.io_mut().update_delta_time(now - last_frame); + last_frame = now; + } Event::MainEventsCleared => { let gl_window = display.gl_window(); platform diff --git a/imgui-gfx-examples/examples/support/mod.rs b/imgui-gfx-examples/examples/support/mod.rs index f58a905..409c452 100644 --- a/imgui-gfx-examples/examples/support/mod.rs +++ b/imgui-gfx-examples/examples/support/mod.rs @@ -94,7 +94,9 @@ impl System { platform .prepare_frame(io, render_sys.window()) .expect("Failed to start frame"); - last_frame = io.update_delta_time(last_frame); + let now = Instant::now(); + io.update_delta_time(now - last_frame); + last_frame = now; let mut ui = imgui.frame(); run_ui(&mut run, &mut ui); diff --git a/src/io.rs b/src/io.rs index 1ba90cb..0d7a242 100644 --- a/src/io.rs +++ b/src/io.rs @@ -2,7 +2,7 @@ use bitflags::bitflags; use std::f32; use std::ops::{Index, IndexMut}; use std::os::raw::{c_char, c_int, c_void}; -use std::time::Instant; +use std::time::Duration; use crate::fonts::atlas::FontAtlas; use crate::fonts::font::Font; @@ -327,9 +327,7 @@ impl Io { sys::ImGuiIO_ClearInputCharacters(self.raw_mut()); } } - pub fn update_delta_time(&mut self, previous: Instant) -> Instant { - let now = Instant::now(); - let delta = now - previous; + pub fn update_delta_time(&mut self, delta: Duration) { let delta_s = delta.as_secs() as f32 + delta.subsec_nanos() as f32 / 1_000_000_000.0; if delta_s > 0.0 { self.delta_time = delta_s; @@ -337,7 +335,6 @@ impl Io { self.delta_time = f32::MIN_POSITIVE; } self.delta_time = delta_s; - now } }