On 2/22/07, Christian Ohm <[EMAIL PROTECTED]> wrote:

What about (pseudocode)

{
       current_ticks = SDL_GetTicks()
       frame_ticks = current_ticks - last_ticks;
       actual_ticks = rate_ticks - frame_ticks;
       if (actual_ticks > 0)
               SDL_Delay(target_ticks - actual_ticks);
       last_ticks = current_ticks;
}

The framecount here is useless, as there's no use in waiting even longer
if you haven't met the previous deadline. Then add an actual framerate
counter in a way that SDL_GetTicks only get called once per frame.

Also the delay should be completely disabled when vsync is active, else
it'll only add more useless waiting.

this is supposed to be used for keeping constant renderer
framerate,currently the gameloop becomes busy if you fail to reach the
limits.

besides,you can rarely have time left with that ideal caculation measure in
wz,unless you set your framerate limits to <10 fps,or you'll never get to
that line.


Well, the delay is only meant to be called when there is time per frame
left, so if current_ticks is larger than one frame in the target frame
rate, the game runs too slow and you don't delay.

Now you add a delay of one targetted frame duration each frame, so you
can't ever reach that rate.

I tested the original code, an immediate return and your variant. The
first two both had roughly the same frame rate, yours was a bit slower
(23 fps vs. 17 fps, or 10 fps vs. 8 fps with more units shown, both at
1526x1174, the first scene at 640x480 is 30 fps vs. 20 fps, all with
vsync on. With vsync off the first scene is 35 fps vs. 23 fps (640x480
again).

Have you actually looked at the framerate with your changes? If you do
not reach the target frame rate it's no surprise when the game runs at
100%, and at less when you add unconditional delays.


well maybe it's my fault to mingle the gameframerate and renderer frame
rate,but why should you make the loop even busier when the mainloop already
becomes slower than expected?

the logics behind this framerate thing in wz is severely broken(though maybe
it was already like this in 1.10 source code...),basically you have to
update all units/ai/game mechanics number of SDL framerate times just in
order to keep a constant client renderer framerate according to this
function,this also gives the player with the highest so-called 'framerate' a
unfair advantage since his units are more responsive and his projectiles are
more likely to hit than other players'...
_______________________________________________
Warzone-dev mailing list
Warzone-dev@gna.org
https://mail.gna.org/listinfo/warzone-dev

Reply via email to