diff options
Diffstat (limited to 'render_sdl.c')
-rw-r--r-- | render_sdl.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/render_sdl.c b/render_sdl.c index 502cae4..3d342ed 100644 --- a/render_sdl.c +++ b/render_sdl.c @@ -14,6 +14,7 @@ int32_t color_map[1 << 12]; uint8_t levels[] = {0, 27, 49, 71, 87, 103, 119, 130, 146, 157, 174, 190, 206, 228, 255}; uint32_t min_delay; +uint32_t frame_delay = 1000/60; void render_init(int width, int height, char * title) { @@ -229,8 +230,6 @@ void render_wait_quit(vdp_context * context) #define BUTTON_START 0x20 #define BUTTON_C 0x20 -#define FRAME_DELAY 16 -#define MIN_DELAY 5 uint32_t frame_counter = 0; uint32_t start = 0; int wait_render_frame(vdp_context * context, int frame_limit) @@ -362,12 +361,11 @@ int wait_render_frame(vdp_context * context, int frame_limit) if (frame_limit) { //TODO: Adjust frame delay so we actually get 60 FPS rather than 62.5 FPS uint32_t current = SDL_GetTicks(); - uint32_t desired = last_frame + FRAME_DELAY; + uint32_t desired = last_frame + frame_delay; if (current < desired) { - uint32_t delay = last_frame + FRAME_DELAY - current; - //TODO: Calculate MIN_DELAY at runtime - if (delay > MIN_DELAY) { - SDL_Delay((delay/MIN_DELAY)*MIN_DELAY); + uint32_t delay = last_frame + frame_delay - current; + if (delay > min_delay) { + SDL_Delay((delay/min_delay)*min_delay); } while ((desired) >= SDL_GetTicks()) { } @@ -389,4 +387,9 @@ int wait_render_frame(vdp_context * context, int frame_limit) return ret; } +void render_fps(uint32_t fps) +{ + frame_delay = 1000/fps; +} + |