From 34c8904e3d735a33dda70f297792ec11f9c12001 Mon Sep 17 00:00:00 2001 From: anth64 Date: Sat, 11 Apr 2026 21:34:19 -0400 Subject: [PATCH] fix: use accumulator to correct game loop --- src/client/main.c | 13 ++++++------- src/gl_client/main.c | 13 ++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/client/main.c b/src/client/main.c index 83ad5af..cc68064 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -12,10 +12,7 @@ static void on_signal(void) { running = 0; } int main(int argc, char *argv[]) { skele_video_config_t video_cfg; - uint64_t last, now, elapsed; - - (void)argc; - (void)argv; + uint64_t last, now, elapsed, accum = 0; skele_clock_init(on_signal); @@ -58,10 +55,12 @@ int main(int argc, char *argv[]) now = skele_time_ns(); elapsed = now - last; + accum += elapsed; + last = now; - if (elapsed >= skele_tick_ns) { - game_tick(); - last = now; + while (accum >= skele_tick_ns) { + skele_tick(); + accum -= skele_tick_ns; } skele_video_present(); diff --git a/src/gl_client/main.c b/src/gl_client/main.c index 83ad5af..cc68064 100644 --- a/src/gl_client/main.c +++ b/src/gl_client/main.c @@ -12,10 +12,7 @@ static void on_signal(void) { running = 0; } int main(int argc, char *argv[]) { skele_video_config_t video_cfg; - uint64_t last, now, elapsed; - - (void)argc; - (void)argv; + uint64_t last, now, elapsed, accum = 0; skele_clock_init(on_signal); @@ -58,10 +55,12 @@ int main(int argc, char *argv[]) now = skele_time_ns(); elapsed = now - last; + accum += elapsed; + last = now; - if (elapsed >= skele_tick_ns) { - game_tick(); - last = now; + while (accum >= skele_tick_ns) { + skele_tick(); + accum -= skele_tick_ns; } skele_video_present();