Tighter run
This commit is contained in:
parent
b5fa665cdb
commit
63108c178a
22
src/uxnemu.c
22
src/uxnemu.c
|
@ -432,28 +432,20 @@ handle_events(Uxn *u)
|
|||
static int
|
||||
run(Uxn *u)
|
||||
{
|
||||
Uint64 now = SDL_GetPerformanceCounter(), frame_end, frame_interval = SDL_GetPerformanceFrequency() / 60;
|
||||
for(;;) {
|
||||
/* .System/halt */
|
||||
if(u->dev[0x0f])
|
||||
return error("Run", "Ended.");
|
||||
frame_end = now + frame_interval;
|
||||
Uint64 now = SDL_GetPerformanceCounter(), frame_end = now, frame_interval = SDL_GetPerformanceFrequency() / 60;
|
||||
for(;!u->dev[0x0f]; now = SDL_GetPerformanceCounter()) {
|
||||
exec_deadline = now + deadline_interval;
|
||||
if(!handle_events(u))
|
||||
return 0;
|
||||
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)
|
||||
redraw();
|
||||
now = SDL_GetPerformanceCounter();
|
||||
if(u->dev[0x20]) {
|
||||
if(!BENCH && ((Sint64)(frame_end - now)) > 0) {
|
||||
SDL_Delay((frame_end - now) / ms_interval);
|
||||
now = frame_end;
|
||||
SDL_WaitEventTimeout(NULL, GETVEC(&u->dev[0x20]) ? (frame_end - SDL_GetPerformanceCounter()) / ms_interval : 0x100000);
|
||||
}
|
||||
} else
|
||||
SDL_WaitEvent(NULL);
|
||||
}
|
||||
return error("SDL_WaitEvent", SDL_GetError());
|
||||
return error("Run", "Ended.");
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Reference in New Issue