diff options
Diffstat (limited to 'src/orgaemu.c')
-rw-r--r-- | src/orgaemu.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/orgaemu.c b/src/orgaemu.c index c1c898f..e22f270 100644 --- a/src/orgaemu.c +++ b/src/orgaemu.c @@ -30,6 +30,7 @@ static size_t stack_ptr = 0, rstack_ptr = 0; static SDL_Window *window = NULL; static SDL_Renderer *renderer = NULL; static SDL_Texture *target = NULL; +static Uint64 next_time = 0; static int fail(void) @@ -114,8 +115,16 @@ render(uint16_t *mem) SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); SDL_RenderCopy(renderer, target, NULL, &dest); + + next_time += 1000 / 30; + const Uint64 cur_time = SDL_GetTicks64(); + if (next_time <= cur_time) { + fprintf(stderr, "lagging %lu\n", cur_time - next_time); + next_time = cur_time; + } else + SDL_Delay(next_time - cur_time); + SDL_RenderPresent(renderer); - SDL_Delay(1000 / 30); /* TODO: proper fps cap */ } static void @@ -390,6 +399,7 @@ main(int argc, char **argv) fprintf(stderr, "%s\n", SDL_GetError()); return fail(); } + next_time = SDL_GetTicks64(); exec_data(mem); return fail(), 0; |