
/*

SDL_framerate: framerate manager

LGPL (c) A. Schiffler

*/

#ifndef _SDL_framerate_h
#define _SDL_framerate_h

/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif

	/* --- */

#include "SDL.h"

	/* --------- Definitions */

/*!
\brief Highest possible rate supported by framerate controller in Hz (1/s).
*/
#define FPS_UPPER_LIMIT		200

/*!
\brief Lowest possible rate supported by framerate controller in Hz (1/s).
*/
#define FPS_LOWER_LIMIT		1

/*!
\brief Default rate of framerate controller in Hz (1/s).
*/
#define FPS_DEFAULT		30

/*! 
\brief Structure holding the state and timing information of the framerate controller. 
*/
	typedef struct {
		Uint32 framecount;
		float rateticks;
		Uint32 lastticks;
		Uint32 rate;
	} FPSmanager;

	/* ---- Function Prototypes */

#if defined(WIN32) || defined(WIN64)
#  if defined(DLL_EXPORT) && !defined(LIBSDL_GFX_DLL_IMPORT)
#    define SDL_FRAMERATE_SCOPE __declspec(dllexport)
#  else
#    ifdef LIBSDL_GFX_DLL_IMPORT
#      define SDL_FRAMERATE_SCOPE __declspec(dllimport)
#    endif
#  endif
#endif
#ifndef SDL_FRAMERATE_SCOPE
#  define SDL_FRAMERATE_SCOPE extern
#endif

	/* Functions return 0 or value for sucess and -1 for error */

	SDL_FRAMERATE_SCOPE void SDL_initFramerate(FPSmanager * manager);
	SDL_FRAMERATE_SCOPE int SDL_setFramerate(FPSmanager * manager, int rate);
	SDL_FRAMERATE_SCOPE int SDL_getFramerate(FPSmanager * manager);
	SDL_FRAMERATE_SCOPE int SDL_getFramecount(FPSmanager * manager);
	SDL_FRAMERATE_SCOPE void SDL_framerateDelay(FPSmanager * manager);

	/* --- */

	/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif

#endif				/* _SDL_framerate_h */
