ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> pygame-users
pygame-users
Re: [pygame] PyGame 2D text in OpenGL?
by kschnee other posts by this author
Aug 3 2005 8:37PM messages near this date
Re: [pygame] pygame from OS X command line | [pygame] PyGame 2D text in OpenGL?
This code is how I managed to draw 2D text in a Pygame OpenGL (3D)
display. As indicated, it's based on a NeHe tutorial, but built into a
class that you can instance and then pass to some other object (like an
interface widget) that needs to draw text.

"""
AB_RenderFont.py
Draws text on the screen.
Closely based on (ie. nearly ripped off from) a tutorial with the
following header:

Ported to PyOpenGL 2.0 by Brian Leair 18 Jan 2004
This code was created by Jeff Molofee 2000
The port was based on the PyOpenGL tutorial and from the
PyOpenGLContext (tests/glprint.py).
If you've found this code useful, please let me know (email Brian Leair
at telcom_sage@yahoo.com).
See original source and C based tutorial at <http://nehe.gamedev.net> .
"""

##### INCLUDED MODULES #####

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.WGL import *
import win32ui, sys

##### CLASSES #####

class FontKeeper:
    def
__init__(self,screensize=[800,600],color=[0.4,0.4,0.8],fontname="Courier",size=24):
        """Handles drawing text on the screen."""
        self.BuildFont(fontname,-size)
        self.screensize = screensize ## Used for reversing draw coords.
        self.color = color

    def BuildFont(self,fontname="Times New
Roman",width=0,size=24,weight=800):
        """Load a font as a set of OpenGL drawing lists, for quick
        drawing of each letter."""
	wgldc = wglGetCurrentDC()
	hDC = win32ui.CreateDCFromHandle(wgldc)
        properties =
{"name":fontname,"width":width,"height":size,"weight":weight}
        self.fontlists = glGenLists(96)
        font = win32ui.CreateFont(properties)
	oldfont = hDC.SelectObject (font) ## ?
        wglUseFontBitmaps(wgldc,32,96,self.fontlists)
	hDC.SelectObject (oldfont) ## ?

    def Write(self,text="",coords=[0,50]):
        """Draw text on the screen. Coords = actual screen coords.
        Y gets reversed because OpenGL does too, treating LL corner as
Y=0."""
        if not text:
            return
        glColor(self.color)
        glRasterPos2i(coords[0],self.screensize[1]-coords[1])
        glPushAttrib(GL_LIST_BIT)
        glListBase(self.fontlists - 32)
        glCallLists(text)
        glPopAttrib()

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved