fix: render timer — no hang, spiral-of-death prevention

- renderTimer accumulates deltaTime each tick
- Render only when renderTimer >= 16.67ms
- If timer overshoots (slow frame), clamp to 0 to prevent spiral of death
- No Thread.Sleep/continue — loop runs continuously, just skips render
  when not enough time has passed
This commit is contained in:
emil28092005
2026-06-19 09:29:45 +03:00
parent f2ae4d0f8f
commit 9555de60ef
+6 -10
View File
@@ -81,12 +81,12 @@ class Program
const double renderFps = 60.0;
var renderFrameTime = 1.0 / renderFps;
var renderAccumulator = 0.0;
var renderTimer = 0.0;
while (!window.ShouldClose)
{
timing.Tick();
renderAccumulator += timing.DeltaTime;
renderTimer += timing.DeltaTime;
// Physics + input run at full speed (uncapped)
window.PumpEvents();
@@ -389,9 +389,11 @@ class Program
}
// Fixed render rate: 60 FPS
renderAccumulator -= renderFrameTime;
if (renderAccumulator >= 0)
if (renderTimer >= renderFrameTime)
{
renderTimer -= renderFrameTime;
if (renderTimer > renderFrameTime) renderTimer = 0; // prevent spiral of death
// Set recording flag before render so renderer can capture
vkRenderer!.IsRecording = isRecording;
@@ -420,12 +422,6 @@ class Program
frames++;
}
else
{
// Not enough time for a render frame — sleep briefly
Thread.Sleep(1);
continue;
}
if (timing.TotalTime - lastFpsTime >= 1.0)
{
Console.WriteLine($"FPS: {frames}, Delta: {timing.DeltaTime * 1000.0:F2} ms");