-
Notifications
You must be signed in to change notification settings - Fork 1
/
FPSLimit.cpp
42 lines (36 loc) · 1.39 KB
/
FPSLimit.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
* \file FPSLimit.cpp
* \brief FPS Limiter.
*
* This class automatically limits the frames per second of a game loop, and it
* provides performance warnings to stdout if the framerate is less than the
* desired value.
*/
#include "FPSLimit.hpp"
static const int NUM_MILLISECONDS_IN_SECOND = 1000;
/**
* \brief Constructor for FPSLimit class.
* \param desiredFPS The desired framerate to regulate to.
*/
FPSLimit::FPSLimit( int desiredFPS ) {
// Calculate the number of milliseconds per frame.
numMillis = NUM_MILLISECONDS_IN_SECOND/desiredFPS;
// Set lastTime to the current timestamp so that we have a place to start from.
lastTime = SDL_GetTicks();
}
/**
* \brief Call every frame at the end to regulate the framerate.
*/
void FPSLimit::Regulate() {
// Figure out how many milliseconds have elapsed since last call.
Uint32 timeDiff = SDL_GetTicks() - lastTime;
// If the amount of time is less than the number of milliseconds per frame, we
// have time left over that we need to sleep for. If not, we need to make a
// performance warning since our loop went over how much time it has.
if ( timeDiff < numMillis )
SDL_Delay( numMillis - timeDiff );
else
printf("Performance warning: Frame took %dms (expected <%dms).\n", timeDiff, numMillis);
// Set this for the next time we call Regulate().
lastTime = SDL_GetTicks();
}