> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to