Skip to main content
GameDev.net gamedev.net
🔒 Locked

c++ SDL FPS Capping and displaying No proper tutorial

Started by BaneTrapper Aug 25, 2012 at 4:45 PM 4 replies 2.9k views
SiCrane
SiCrane
What have you tried? What problems are you having now that you didn't have before?
BaneTrapper
BaneTrapper

What have you tried? What problems are you having now that you didn't have before?


I remember i did SDL application that capped frames per second, Counted loops, Make approximation on how much is a FPS and all that good stuff
and i printed everything to screen,
i got bout 20folders each with about 20+ projects its hard to find one i need. If i knew name at least.

My current problem is that,
Uint32 a = SDL_GetTicks();
//10 milisec passed;
Uint32 b = SDL_GetTicks() - a;
b is not 10 nor its 100 nor its 1 i get illogical number
Its 100% Uint32 = Uint32 - Uint32 and i dont get it;

Edit:: i know SDL_GetTicks() is inacurate to 10 milisec but i get such random numbers like 1031 one loop next one i get 323

I tried searching on google a good tutorial but difficult to find a proper one.
So could you suggest one
Servant of the Lord
Servant of the Lord
FPS capping is not something that is API-specific, though certain APIs may have features to assist in it.
You don't need a tutorial on "FPS capping in SDL", but just one on FPS capping, which you personally happen to use in SDL.

But really, you don't normally want to cap your FPS (the drawing of the game). Typically, you either cap or interpolate your logic (the moving of objects in the game).
If you successfully can handle the speed that your game updates, then the program can draw as fast or slow as the computer wants without harm (unless it gets too slow).

You can either fix your timestep (cap your logic updates) or have frame independent movement (move your logic based on how much time has passed).
But if you decide to cap your FPS anyway, here's how.

The only time you really want to cap your framerate is if you are syncronizing your game's framerate with the monitor refresh rate.
Goran Milovanovic
Goran Milovanovic
Typically, I use something like this:

[source lang="cpp"]while (1){

Uint32 time_before = SDL_GetTicks();

render();

Uint32 time_after = SDL_GetTicks();

int delta = time_after - time_before;
int time_wait = (1000 / 60) - delta; // cap at 60 fps

if (time_wait > 0){
SDL_Delay(time_wait)
}


}[/source]

It might not be 100% accurate, but it does what I want.
+---------------------------------------------------------------------+ | Game Dev video tutorials  ->   http://www.youtube.com/goranmilovano | +-------------------------------------

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.