[UI] Use ticks as frame time instead of file time.
File time is not as accurate as its resolution suggests. This results in a zero time delta between frames for high fps.
This commit is contained in:
parent
c3f3bd8701
commit
2c99228041
|
@ -173,12 +173,15 @@ void Window::OnPaint(UIEvent* e) {
|
|||
|
||||
++frame_count_;
|
||||
++fps_frame_count_;
|
||||
uint64_t now_ns = xe::Clock::QueryHostSystemTime();
|
||||
if (now_ns > fps_update_time_ns_ + 1000 * 10000) {
|
||||
static auto tick_frequency = Clock::QueryHostTickFrequency();
|
||||
auto now_ticks = Clock::QueryHostTickCount();
|
||||
// Average fps over 1 second.
|
||||
if (now_ticks > fps_update_time_ticks_ + tick_frequency * 1) {
|
||||
fps_ = static_cast<uint32_t>(
|
||||
fps_frame_count_ /
|
||||
(static_cast<double>(now_ns - fps_update_time_ns_) / 10000000.0));
|
||||
fps_update_time_ns_ = now_ns;
|
||||
(static_cast<double>(now_ticks - fps_update_time_ticks_) /
|
||||
tick_frequency));
|
||||
fps_update_time_ticks_ = now_ticks;
|
||||
fps_frame_count_ = 0;
|
||||
}
|
||||
|
||||
|
@ -186,12 +189,13 @@ void Window::OnPaint(UIEvent* e) {
|
|||
|
||||
// Prepare ImGui for use this frame.
|
||||
auto& io = imgui_drawer_->GetIO();
|
||||
if (!last_paint_time_ns_) {
|
||||
if (!last_paint_time_ticks_) {
|
||||
io.DeltaTime = 0.0f;
|
||||
last_paint_time_ns_ = now_ns;
|
||||
last_paint_time_ticks_ = now_ticks;
|
||||
} else {
|
||||
io.DeltaTime = (now_ns - last_paint_time_ns_) / 10000000.0f;
|
||||
last_paint_time_ns_ = now_ns;
|
||||
io.DeltaTime = (now_ticks - last_paint_time_ticks_) /
|
||||
static_cast<float>(tick_frequency);
|
||||
last_paint_time_ticks_ = now_ticks;
|
||||
}
|
||||
io.DisplaySize = ImVec2(static_cast<float>(scaled_width()),
|
||||
static_cast<float>(scaled_height()));
|
||||
|
|
|
@ -180,9 +180,9 @@ class Window {
|
|||
|
||||
uint32_t frame_count_ = 0;
|
||||
uint32_t fps_ = 0;
|
||||
uint64_t fps_update_time_ns_ = 0;
|
||||
uint64_t fps_update_time_ticks_ = 0;
|
||||
uint64_t fps_frame_count_ = 0;
|
||||
uint64_t last_paint_time_ns_ = 0;
|
||||
uint64_t last_paint_time_ticks_ = 0;
|
||||
|
||||
bool modifier_shift_pressed_ = false;
|
||||
bool modifier_cntrl_pressed_ = false;
|
||||
|
|
Loading…
Reference in New Issue