Glenn Fiedler's fixed timestep with fake threads
Posted
by
kaoD
on Game Development
See other posts from Game Development
or by kaoD
Published on 2012-11-29T11:07:06Z
Indexed on
2012/11/29
11:22 UTC
Read the original article
Hit count: 496
I've implemented Glenn Fiedler's Fix Your Timestep! quite a few times in single-threaded games.
Now I'm facing a different situation: I'm trying to do this in JavaScript. I know JS is single-threaded, but I plan on using requestAnimationFrame for the rendering part.
This leaves me with two independent fake threads: simulation and rendering (I suppose requestAnimationFrame isn't really threaded, is it? I don't think so, it would BREAK JS.) Timing in these threads is independent too: dt
for simulation and render is not the same.
If I'm not mistaken, simulation should be up to Fiedler's while loop end. After the while loop, accumulator < dt
so I'm left with some unspent time (dt
) in the simulation thread.
The problem comes in the draw/interpolation phase:
const double alpha = accumulator / dt;
State state = currentState*alpha + previousState * ( 1.0 - alpha );
render( state );
In my render callback, I have the current timestamp to which I can subtract the last-simulated-in-physics-timestamp to have a dt
for the current frame.
Should I just forget about this dt
and draw using the physics thread's dt
? It seems weird, since, well, I want to interpolate for the unspent time between simulation and render too, right?
Of course, I want simulation and rendering to be completely independent, but I can't get around the fact that in Glenn's implementation the renderer produces time and the simulation consumes it in discrete dt sized chunks.
A similar question was asked in Semi Fixed-timestep ported to javascript but the question doesn't really get to the point, and answers there point to removing physics from the render thread (which is what I'm trying to do) or just keeping physics in the render callback too (which is what I'm trying to avoid.)
© Game Development or respective owner