Actually, on_draw is called when window is considered dirty, ie it needs to
be redrawn. Otherwise, window is idling.

2012/4/2 Cameron Seebach <[email protected]>

> Hi Everybody! I hope you are all doing well today.
>
> Today I started exploring pyglet again after a considerable time away, and
> I ran into a curious problem. I could not get pyglet to call "on_draw" in
> even the most simple of applications!
>
> Here's a demonstration:
>
> ================
> import pyglet
>
> window = pyglet.window.Window()
> draw_count = 0
>
> @window.event
> def on_draw():
>     global draw_count
>     window.clear()
>     draw_count += 1
>     print "drawing {}".format(draw_count)
>
> pyglet.app.run()
> ================
>
> If you're using the latest hg repository pyglet (revision 2632 as of this
> post), and you're running Windows like me, you'll probably see just this:
>
> C:\Users\cseebach>python pyglet_draw_demo.py
> drawing 1
>
> If you minimize and restore (hide and unhide) the window, you'll see a few
> more draw reports.
>
> If you're anything like me, you panicked! This is basically what the
> "Hello, World!" tutorial in the docs says to do. What on Earth is going on?
>
> You're about to see that this behavior is actually a feature, and not a
> bug.
>
> I've changed the code slightly to add an update() method which does
> nothing, called approximately once every 1/60th of a second.
>
> ================
> import pyglet
>
> window = pyglet.window.Window()
> draw_count = 0
>
> @window.event
> def on_draw():
>     global draw_count
>     window.clear()
>     draw_count += 1
>     print "drawing {}".format(draw_count)
>
> def update(dt):
>     pass
>
> pyglet.clock.schedule_interval(update, 1/60.0)
>
> pyglet.app.run()
> ================
>
> Try running that sucker!
>
> C:\Users\cseebach>python pyglet_draw_demo_2.py
> drawing 1
> drawing 2
> drawing 3
> ...
> drawing 3242562461     #(no, I didn't actually run it for 15,000 hours,
> but you get the point)
> etc...
>
> Here's my theory, which I hope will be supported and elucidated by
> somebody more familiar with the win32 event loop code in pyglet:
>
> pyglet only calls "on_draw" when there are other events to be dispatched.
> Previously, there were no events in our loop to dispatch! Now that we've
> scheduled update() for 60 times a second, our loop is no longer empty, and
> pyglet will happily draw our stuff! This minimizes the cpu and gpu usage of
> your application, which I believe is more important than always calling
> on_draw.
>
> Hope this saves somebody a little time and frustration when learning
> pyglet.
>
> --Cam
>
> --
> You received this message because you are subscribed to the Google Groups
> "pyglet-users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/pyglet-users/-/Vxahw9FqL9wJ.
> 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.
>



-- 
Bc. Peter Vaňušanik
http://www.bishojo.tk

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