Files
scaffold/src/client/main.c
T
anth64 9ba3494eac feat: log fps/frame/tick diagnostics in example clients
Once/sec via stk_log, using skele's new fps.h/clock.h counters.
2026-08-23 17:44:33 +02:00

89 lines
1.8 KiB
C

#include "game.h"
#include <skele/client/input.h>
#include <skele/client/video.h>
#include <skele/clock.h>
#include <skele/fps.h>
#include <skele/skele.h>
#include <stk/stk.h>
#include <stk/stk_log.h>
static uint8_t running = 1;
static void on_signal(void) { running = 0; }
int main(int argc, char *argv[])
{
skele_video_config_t video_cfg;
uint64_t last, now, elapsed, accum = 0, last_print = 0;
skele_clock_init(on_signal);
if (skele_stk_setup() != SKELE_INIT_SUCCESS)
return 1;
if (skele_init() != SKELE_INIT_SUCCESS) {
skele_stk_teardown();
return 1;
}
video_cfg.render_width = SKELE_DEFAULT_RENDER_WIDTH;
video_cfg.render_height = SKELE_DEFAULT_RENDER_HEIGHT;
video_cfg.window_width = 0;
video_cfg.window_height = 0;
video_cfg.max_fps = 0;
video_cfg.flags = SKELE_VIDEO_VSYNC;
if (skele_video_init(video_cfg) != SKELE_INIT_SUCCESS) {
skele_stk_teardown();
skele_shutdown();
return 1;
}
skele_video_set_title("game");
if (!game_init()) {
skele_video_shutdown();
skele_stk_teardown();
skele_shutdown();
return 1;
}
last = skele_time_ns();
while (running) {
if (!skele_input_poll())
break;
stk_poll();
now = skele_time_ns();
elapsed = now - last;
accum += elapsed;
last = now;
while (accum >= skele_tick_ns) {
skele_tick();
accum -= skele_tick_ns;
}
skele_video_present();
if (now - last_print >= 1000000000ULL) {
stk_log(STK_LOG_INFO,
"fps=%.1f frame=%.2fms/%.2fms tps=%.1f tick=%lluns/%lluns idle=%lluns",
skele_fps, skele_frame_time_ms,
skele_frame_budget_ms, skele_tps,
(unsigned long long)skele_tick_time_ns,
(unsigned long long)skele_tick_ns,
(unsigned long long)skele_tick_idle_ns);
last_print = now;
}
}
game_shutdown();
skele_video_shutdown();
skele_stk_teardown();
skele_shutdown();
return 0;
}