Tighter run

This commit is contained in:
Devine Lu Linvega 2023-01-26 10:56:14 -08:00
parent b5fa665cdb
commit 63108c178a
1 changed files with 8 additions and 16 deletions

View File

@ -432,28 +432,20 @@ handle_events(Uxn *u)
static int static int
run(Uxn *u) run(Uxn *u)
{ {
Uint64 now = SDL_GetPerformanceCounter(), frame_end, frame_interval = SDL_GetPerformanceFrequency() / 60; Uint64 now = SDL_GetPerformanceCounter(), frame_end = now, frame_interval = SDL_GetPerformanceFrequency() / 60;
for(;;) { for(;!u->dev[0x0f]; now = SDL_GetPerformanceCounter()) {
/* .System/halt */
if(u->dev[0x0f])
return error("Run", "Ended.");
frame_end = now + frame_interval;
exec_deadline = now + deadline_interval; exec_deadline = now + deadline_interval;
if(!handle_events(u)) if(!handle_events(u))
return 0; return 0;
uxn_eval(u, GETVEC(&u->dev[0x20])); if (((Sint64)(frame_end - SDL_GetPerformanceCounter())) >= 0) {
frame_end = now + frame_interval;
uxn_eval(u, GETVEC(&u->dev[0x20]));
}
if(uxn_screen.fg.changed || uxn_screen.bg.changed) if(uxn_screen.fg.changed || uxn_screen.bg.changed)
redraw(); redraw();
now = SDL_GetPerformanceCounter(); SDL_WaitEventTimeout(NULL, GETVEC(&u->dev[0x20]) ? (frame_end - SDL_GetPerformanceCounter()) / ms_interval : 0x100000);
if(u->dev[0x20]) {
if(!BENCH && ((Sint64)(frame_end - now)) > 0) {
SDL_Delay((frame_end - now) / ms_interval);
now = frame_end;
}
} else
SDL_WaitEvent(NULL);
} }
return error("SDL_WaitEvent", SDL_GetError()); return error("Run", "Ended.");
} }
int int