aboutsummaryrefslogtreecommitdiff
path: root/src/orgaemu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/orgaemu.c')
-rw-r--r--src/orgaemu.c12
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;