commit:b9bb682d4fa0facebc0dc2462e28b46160ef1575
author:chip
committer:chip
date:Wed Nov 14 00:40:04 2007 +0000
parents:c83556a3ed05e70b0cc6871094bcae309e8aee66
Changed sprite anims to use multiple display lists
diff --git a/Engine.py b/Engine.py
line changes: +9/-2
index f591657..3246a9a
--- a/Engine.py
+++ b/Engine.py
@@ -12,10 +12,18 @@ except:
     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()
@@ -36,7 +44,6 @@ def init(resolution=(640,480)):
 	glEnableClientState(GL_VERTEX_ARRAY)
 	glEnableClientState(GL_TEXTURE_COORD_ARRAY)
 
-fpsman = pygame.time.Clock()
 
 def engine(eventhandlers, updaters, drawers):
 	running = True

diff --git a/Sprite.py b/Sprite.py
line changes: +14/-15
index 695fc19..abc76be
--- a/Sprite.py
+++ b/Sprite.py
@@ -16,7 +16,7 @@ class Sprite:
 	size = (0,0)
 	rotation = 0
 	uparrow = False
-	displaylist = None
+	displaylists = None
 
 	def __init__(self, file, genlist=True):
 		self.frames = []
@@ -36,8 +36,9 @@ class Sprite:
 
 
 	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(
@@ -49,15 +50,15 @@ class Sprite:
 			((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):
@@ -75,9 +76,7 @@ class Sprite:
 		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)

diff --git a/config.py b/config.py
line changes: +1/-0
index 4871102..a221b75
--- a/config.py
+++ b/config.py
@@ -1,3 +1,4 @@
 # 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