diff options
author | kdx <kikoodx@paranoici.org> | 2023-04-14 03:44:39 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-04-14 03:44:39 +0200 |
commit | dcbc2dfa4dba9bf800d730f76f3c63faa3accb81 (patch) | |
tree | b6a28f5cec940d4b61979096244b792033c58301 /src | |
parent | cccfd1feffba5cab4510ed1d0597a9a7961854ef (diff) | |
download | orga-dcbc2dfa4dba9bf800d730f76f3c63faa3accb81.tar.gz |
input sample and clean fps manager
Diffstat (limited to 'src')
-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; |