Changed sprite anims to use multiple display lists
print 'sprite_engine requires PyOpenGL'
raise SystemExit
+import config
+
+fpsman = pygame.time.Clock()
+
def init(resolution=(640,480)):
pygame.init()
- pygame.display.set_mode(resolution, OPENGL|DOUBLEBUF|HWSURFACE)
+ try:
+ sres = [int(n * config.scalefactor) for n in resolution]
+ except AttributeError:
+ sres = resolution
+ pygame.display.set_mode(sres, OPENGL|DOUBLEBUF|HWSURFACE)
# Set up the camera
glLoadIdentity()
glEnableClientState(GL_VERTEX_ARRAY)
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
-fpsman = pygame.time.Clock()
def engine(eventhandlers, updaters, drawers):
running = True
size = (0,0)
rotation = 0
uparrow = False
- displaylist = None
+ displaylists = None
def __init__(self, file, genlist=True):
self.frames = []
def gen_displaylist(self):
- if self.displaylist == None:
- self.displaylist = glGenLists(1)
+ if self.displaylists == None:
+ n = glGenLists(len(self.frames))
+ self.displaylists = range(n,n+len(self.frames))
x = -self.size[0]/2
y = -self.size[1]/2
vertexarray = array(
((1.0,0.0),(1.0,1.0),(0.0,1.0),(0.0,0.0))
,'f')
index = array((0,1,2,3),'i')
- glNewList(self.displaylist, GL_COMPILE)
- glEnable(GL_TEXTURE_2D)
- if len(self.frames) == 1: # Static texture
- glBindTexture(GL_TEXTURE_2D, self.frames[self.frameno])
- glColor4fv(self.color)
- glVertexPointerf(vertexarray)
- glTexCoordPointerf(texcoordarray)
- glDrawArrays(GL_TRIANGLE_FAN, 0, 4)
- glEndList()
+ for i in range(0,len(self.frames)):
+ glNewList(self.displaylists[i], GL_COMPILE)
+ glEnable(GL_TEXTURE_2D)
+ glBindTexture(GL_TEXTURE_2D, self.frames[i])
+ glColor4fv(self.color)
+ glVertexPointerf(vertexarray)
+ glTexCoordPointerf(texcoordarray)
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4)
+ glEndList()
def anim_start(self):
glTranslatef(self.position[0], self.position[1], 0)
if self.rotation != 0:
glRotatef(self.rotation, 0, 0, -1)
- if len(self.frames) > 1:
- glBindTexture(GL_TEXTURE_2D, self.frames[self.frameno])
- glCallList(self.displaylist)
+ glCallList(self.displaylists[self.frameno])
if self.uparrow:
glDisable(GL_TEXTURE_2D)
glColor3f(0.0,0.0,1.0)
# If your card has trouble with non-square textures (my TNT seems to), set this
# to true to make all textures square
square_textures = True
+#scalefactor = 2