c++ SDL FPS Capping and displaying No proper tutorial

Started by
4 comments, last by Goran Milovanovic 11 years, 8 months ago
Hello.
This easy and simple concept, Done it thousand times before and now am getting problems...

Tutorial should have:
How to cap FPS,
Needs to be able to count fps so its printable to screen;
Should have delta time.

Cant find proper tutorial any suggestions.
Advertisement
What have you tried? What problems are you having now that you didn't have before?

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
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.
Since i am making a windowed game,
I want to cap the Rendering loop to a 80 - 60FPS.
Thanks on those all tutorials.
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 | +---------------------------------------------------------------------+

This topic is closed to new replies.

Advertisement