| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /*
- SDL_framerate: framerate manager
- LGPL (c) A. Schiffler
-
- */
- #include "stdafx.h"
- #include "SDL_framerate.h"
- /*
- Initialize the framerate manager
- */
- void SDL_initFramerate(FPSmanager * manager)
- {
- /*
- * Store some sane values
- */
- manager->framecount = 0;
- manager->rate = FPS_DEFAULT;
- manager->rateticks = (1000.0 / (float) FPS_DEFAULT);
- manager->lastticks = SDL_GetTicks();
- }
- /*
- Set the framerate in Hz
- */
- int SDL_setFramerate(FPSmanager * manager, int rate)
- {
- if ((rate >= FPS_LOWER_LIMIT) && (rate <= FPS_UPPER_LIMIT)) {
- manager->framecount = 0;
- manager->rate = rate;
- manager->rateticks = (1000.0 / (float) rate);
- return (0);
- } else {
- return (-1);
- }
- }
- /*
- Return the current target framerate in Hz
- */
- int SDL_getFramerate(FPSmanager * manager)
- {
- if (manager == NULL) {
- return (-1);
- } else {
- return (manager->rate);
- }
- }
- /*
- Delay execution to maintain a constant framerate. Calculate fps.
- */
- void SDL_framerateDelay(FPSmanager * manager)
- {
- Uint32 current_ticks;
- Uint32 target_ticks;
- Uint32 the_delay;
- /*
- * Next frame
- */
- manager->framecount++;
- /*
- * Get/calc ticks
- */
- current_ticks = SDL_GetTicks();
- target_ticks = manager->lastticks + (Uint32) ((float) manager->framecount * manager->rateticks);
- if (current_ticks <= target_ticks) {
- the_delay = target_ticks - current_ticks;
- SDL_Delay(the_delay);
- } else {
- manager->framecount = 0;
- manager->lastticks = SDL_GetTicks();
- }
- }
|