Cap UI overlay rate

No need to update each frame, esp. for samples with high frame rates
This commit is contained in:
Sascha Willems 2024-05-23 21:52:24 +02:00
parent a3a75219b6
commit 9a8710a57c
2 changed files with 10 additions and 1 deletions

View file

@ -65,6 +65,7 @@ namespace vks
bool visible{ true };
bool updated{ false };
float scale{ 1.0f };
float updateTimer{ 0.0f };
UIOverlay();
~UIOverlay();

View file

@ -307,7 +307,6 @@ void VulkanExampleBase::nextFrame()
}
tPrevEnd = tEnd;
// TODO: Cap UI overlay update rates
updateOverlay();
}
@ -690,6 +689,15 @@ void VulkanExampleBase::updateOverlay()
if (!settings.overlay)
return;
// The overlay does not need to be updated with each frame, so we limit the update rate
// Not only does this save performance but it also makes display of fast changig values like fps more stable
UIOverlay.updateTimer -= frameTimer;
if (UIOverlay.updateTimer >= 0.0f) {
return;
}
// Update at max. rate of 30 fps
UIOverlay.updateTimer = 1.0f / 30.0f;
ImGuiIO& io = ImGui::GetIO();
io.DisplaySize = ImVec2((float)width, (float)height);