> On Tue, Sep 9, 2008 at 1:27 AM, 3TATUK <[EMAIL PROTECTED]> wrote: > > ... > > At this point it's kind of pre-mature optimization because pyglet has > > serious FPS issues as it is. > > ( see http://code.google.com/p/pyglet/issues/detail?id=341 ) > > Pyglet does not have serious FPS issues. set_fps_limit() is > deprecated. If you want an almost constant FPS, write your own event > loop with blocking clock ticks. Otherwise, schedule your animations > and be happy. > > -Drew
Writing a good main-loop is not simple - mine took many days and is still not perfect. I hoped pyglet will do this work for me, since everything else seems really well thought out. Thanks :) But considering main-loops - all examples that come with pyglet have some issues (at least under windows. pyglet version 1.1.1 2224 2008-08-26). Pyglet 1.1 has the new application event loop. Docs recommend using clock.schedule_interval(update, 1/60.0) to get 60fps, and clock.schedule(update) to get max fps. Neither works, as fps is not even near the desired fps. Trying to use the deprecated pyglet.clock.set_fps_limit(60) results in jumpy animations (if vsync is off) and too high cpu usage. Now what.. I've created four test-programs, each one a slightly modified version of the pyglet-1.1.1-docs.zip opengl.py example. WinMerge can be used to quickly see the differences between these versions. http://etm.blastnet.ee/var/list/opengl_clock_schedule.py http://etm.blastnet.ee/var/list/opengl_clock_schedule_interval.py http://etm.blastnet.ee/var/list/opengl_fps_limit.py http://etm.blastnet.ee/var/list/opengl_custom.py And here are the results I got: (copy-pasted from the py files) ---- opengl_clock_schedule.py pyglet.clock.schedule(update) # # after startup : 64 fps 0% cpu # while moving mouse inside the window: 143..149 fps, 3% cpu # after window resize or move : 3300..3500 fps, 60..70% cpu (and stays this way) # # (core2duo e8200, nvidia 8800gt, xp sp2. 50% cpu means 100% of one core) # # window.invalid = True has no effect on fps ---- opengl_clock_schedule_interval.py pyglet.clock.schedule_interval(update, ..) # # param : fps cpu cpu while mousemove cpu after move or resize # : # 1/30. : 21 0% 3% 20..23% # 1/60. : 32 0% 3% 32..39% # 1/100.: 64 0% 3% 58..63% # 1/200.: 64 0% 3% 62..75% # # no change if i move the window, or move mouse inside the window. # ---- opengl_fps_limit.py pyglet.clock.set_fps_limit(..) # # limit : fps cpu # : # 0 : 3400..3600 70..82% # 1/30. : 29..60 14% # 1/60. : 59..60 28% # 1/100. : 99..102 44% # 1/200. : 180..185 50% # 1/400. : 126..130 50% # 1/800. : 126..130 50% # # fps was NOT stable. even changing between 59..60 means jumpy animations. # ---- opengl_custom.py This has my own main-loop. Compare cpu usage.. And animations really are as smooth without vsync as with (ok, some occasional tearing, but absolutely no jumping). # # fps_dt : fps cpu # : # 0. : 3400..3600 70..82% # 1/60. : 60 0% # 1/100. : 100 0% # 1/200. : 200 0% # 1/400. : 400 0..20% # 1/800. : 800 50..76% # ---- Sadly I chose a bad example. Problems would've been much more visible on a big rotating checkerboard. Well, until next time.. Some of the jumpiness can be traced back to pyglet.clock.tick() returning too big values ~4 times per second (if the program runs at 60fps), and too small values rest of the time. Using standard time module dt = time.clock() - prev_clock is much more precise. I'll see if I can find something in pyglet source. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "pyglet-users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/pyglet-users?hl=en -~----------~----~----~----~------~----~------~--~---
