Created
November 1, 2010 20:48
-
-
Save anonymous/658844 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- frame-based animation, SDL | |
mainloop1 :: Game -> IO () | |
mainloop1 game@Game{fpsmgr=fpsmgr,time=t0} = do | |
t1 <- SDL.getTicks | |
game' <- handleEvents game | |
let game'' = step game' | |
t2 <- SDL.getTicks | |
sdlRender game'' | |
t3 <- SDL.getTicks | |
Framerate.delay $ fpsmgr | |
t4 <- SDL.getTicks | |
sdlFlip | |
t5 <- SDL.getTicks | |
let rate = 1000 / fromIntegral (t5-t0) | |
when debug $ printf "times & frame rate: render %4d delay %4d flip %4d frame %4d %4.0f\n" (t3-t2) (t4-t3) (t5-t4) (t5-t0) (rate::Double) | |
unless (over game'') $ mainloop game''{time=t5} | |
-- frame-based animation, GL | |
mainloop2 :: Game -> IO () | |
mainloop2 Game{over=True} = return () | |
mainloop2 game@Game{fpsmgr=fpsmgr,time=t0} = do | |
t1 <- SDL.getTicks | |
game' <- handleEvents game | |
let game'' = step game' | |
t2 <- SDL.getTicks | |
glRender game'' | |
t3 <- SDL.getTicks | |
Framerate.delay $ fpsmgr | |
t4 <- SDL.getTicks | |
glFlip | |
t5 <- SDL.getTicks | |
let rate = 1000 / fromIntegral (t5-t0) | |
when debug $ printf "times & frame rate: render %4d delay %4d flip %4d frame %4d %4.0f\n" (t3-t2) (t4-t3) (t5-t4) (t5-t0) (rate::Double) | |
mainloop game''{time=t1} | |
-- time based animation, GL | |
mainloop3 :: Game -> IO () | |
mainloop3 Game{over=True} = return () | |
mainloop3 game@Game{fpsmgr=fpsmgr,time=t0} = do | |
t1 <- SDL.getTicks | |
game' <- handleEvents game | |
let steptime = 1000 `div` gamerate | |
frametime = min (t1-t0) 50 | |
(numsteps,remainder) = (frametime `div` steptime, frametime `mod` steptime) | |
game'' = stepN numsteps step game'{time=t1-remainder} | |
-- when debug $ printf "frametime %4d steps %4d remainder %4d\n" frametime (frametime `div` steptime) (frametime `mod` steptime) | |
when (numsteps > 0) $ do | |
-- do | |
-- t2 <- SDL.getTicks | |
glRender game'' | |
-- t3 <- SDL.getTicks | |
Framerate.delay $ fpsmgr | |
-- t4 <- SDL.getTicks | |
glFlip | |
t5 <- SDL.getTicks | |
let rate = 1000 / fromIntegral (t5-t0) | |
-- when debug $ printf "times & frame rate: render %4d delay %4d flip %4d frame %4d %4.0f\n" (t3-t2) (t4-t3) (t5-t4) (t5-t0) (rate::Double) | |
when debug $ printf "times & frame rate: frame %4d %4.0f\n" (t5-t0) (rate::Double) | |
mainloop game'' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment