Fantastic, thanks :0)
On Dec 30, 5:26 am, "Alex Holkner" <[EMAIL PROTECTED]> wrote:
> On 12/30/07, Mike Lawrence <[EMAIL PROTECTED]> wrote:
>
>
>
> > Hi all,
>
> > The code below demonstrates the problem. I'm running pyglet 1.0beta3
> > with python 2.5 on OS 10.5.1.
>
> If anyone's keen to become a pyglet expert, this is a great
> troubleshooting problem to sink your teeth into. Don't spoil the
> challenge if you want to figure it out yourself ;-)
>
> .
> .
> .
> (spoiler)
> .
> .
> .
>
>
>
> > def show_message(win,text,my_font):
> > win.dispatch_events()
> > win.clear()
> > rendered_text = font.Text(my_font,text,win.width/2,win.height/2)
> > rendered_text.draw()
> > win.flip()
>
> > def draw_cross(win,size,thickness,color):
> > win.clear()
> > aspect=win.height/float(win.width)
> > glColor3f(color[0],color[1],color[2])
> >
> > glRectf(-aspect*size*thickness/2,-size/2,aspect*size*thickness/2,size/
> > 2)
> >
> > glRectf(-aspect*size/2,-size*thickness/2,aspect*size/2,size*thickness/
> > 2)
> > win.flip()
>
> > ########
> > #Demonstrate the problem
> > ########
>
> > #I can draw a cross...
> > draw_cross(win,.5,.2,[.5,.5,.5])
>
> > #but when I write some text to the screen...
> > show_message(win,'Ahoy there!',my_font)
>
> > #I can no longer draw the cross...
> > draw_cross(win,.5,.2,[.5,.5,.5])
>
> > #but I can draw more text...
> > show_message(win,'Arrrgh!',my_font)
>
> The problem has nothing to do with text rendering, just the peculiar
> arrangement of your code. Note that show_message() begins with a
> dispatch_events, but draw_cross() does not. The first draw_cross()
> invocation therefore runs before any dispatch_events() calls.
>
> Why does this matter, since you're not responding to any events?
> There is one important event that is triggered when the window is
> first created, but queued until the first dispatch_events() is called:
> on_resize. There is a default handler on Window that handles this by
> setting up an orthographic projection in window coordinates. Before
> this handler is called, the default OpenGL projection is resident,
> which is a normalized "unit" cube ([-1, 1] on all axes).
>
> So, the first draw_cross() invocation correctly renders into this unit
> cube. The show_message() invocation then causes the on_resize event
> to be handled, which sets up the window-space orthographic projection
> that pyglet.font.Text expects.
>
> Finally, the next draw_cross() doesn't appear to draw anything because
> it's now drawing into window-space coordinates, and the cross will be
> smaller than a pixel.
>
> The moral: stick to the recommended event loop even for simple test
> programs, unless you have a very specific need not to. And unless
> you're providing your own on_resize handler, you must draw everything
> in window-space coordinates.
>
> Cheers,
> Alex.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---