r4852 - in packages/trunk/fretsonfire/debian: . patches
Matthew Johnson
mjj29 at alioth.debian.org
Wed Dec 5 15:41:18 UTC 2007
Author: mjj29
Date: 2007-12-05 15:41:18 +0000 (Wed, 05 Dec 2007)
New Revision: 4852
Added:
packages/trunk/fretsonfire/debian/patches/font-revert.patch
Modified:
packages/trunk/fretsonfire/debian/changelog
packages/trunk/fretsonfire/debian/patches/series
Log:
attempt to make fonts render
Modified: packages/trunk/fretsonfire/debian/changelog
===================================================================
--- packages/trunk/fretsonfire/debian/changelog 2007-12-05 10:59:11 UTC (rev 4851)
+++ packages/trunk/fretsonfire/debian/changelog 2007-12-05 15:41:18 UTC (rev 4852)
@@ -13,8 +13,11 @@
[ Jon Dowland ]
* add Homepage: control field to source stanza
- -- Jon Dowland <jon at alcopop.org> Mon, 03 Dec 2007 17:42:11 +0000
+ [ Matthew Johnson ]
+ * Add patch reverting Font.py changes to make text render
+ -- Matthew Johnson <mjj29 at debian.org> Wed, 5 Dec 2007 15:38:04 +0000
+
fretsonfire (1.2.451.dfsg-2) unstable; urgency=low
[ Matthew Johnson ]
Added: packages/trunk/fretsonfire/debian/patches/font-revert.patch
===================================================================
--- packages/trunk/fretsonfire/debian/patches/font-revert.patch (rev 0)
+++ packages/trunk/fretsonfire/debian/patches/font-revert.patch 2007-12-05 15:41:18 UTC (rev 4852)
@@ -0,0 +1,231 @@
+Index: fretsonfire-1.2.451.dfsg/src/Font.py
+===================================================================
+--- FretsOnFire-src-1.2.512/src/Font.py 2007-09-04 19:39:22.000000000 +0100
++++ FretsOnFire-src-1.2.451/src/Font.py 2007-02-20 19:42:45.000000000 +0000
+@@ -21,26 +21,22 @@
+ #####################################################################
+
+ import pygame
+-import numpy
+ from OpenGL.GL import *
+ import sys
+
+-from Texture import Texture, TextureAtlas, TextureAtlasFullException
++from Texture import Texture
+
+ class Font:
+ """A texture-mapped font."""
+ def __init__(self, fileName, size, bold = False, italic = False, underline = False, outline = True,
+ scale = 1.0, reversed = False, systemFont = False):
+ pygame.font.init()
+- self.size = size
+- self.scale = scale
+- self.glyphCache = {}
+- self.glyphSizeCache = {}
+- self.outline = outline
+- self.glyphTextures = []
+- self.reversed = reversed
+- self.stringCache = {}
+- self.stringCacheLimit = 256
++ self.size = size
++ self.scale = scale
++ self.glyphCache = {}
++ self.glyphSizeCache = {}
++ self.outline = outline
++ self.reversed = reversed
+ # Try loading a system font first if one was requested
+ self.font = None
+ if systemFont and sys.platform != "win32":
+@@ -91,71 +87,11 @@
+ """
+ texture.setFilter(GL_LINEAR, GL_LINEAR)
+ texture.setRepeat(GL_CLAMP, GL_CLAMP)
+- self.glyphCache[character] = (texture, (0.0, 0.0, texture.size[0], texture.size[1]))
++ self.glyphCache[character] = texture
+ s = .75 * self.getHeight() / float(texture.pixelSize[0])
+ self.glyphSizeCache[character] = (texture.pixelSize[0] * s, texture.pixelSize[1] * s)
+
+- def _renderString(self, text, pos, direction, scale):
+- if not text:
+- return
+-
+- if not (text, scale) in self.stringCache:
+- currentTexture = None
+- #x, y = pos[0], pos[1]
+- x, y = 0.0, 0.0
+- vertices = numpy.empty((4 * len(text), 2), numpy.float32)
+- texCoords = numpy.empty((4 * len(text), 2), numpy.float32)
+- vertexCount = 0
+- cacheEntry = []
+-
+- for i, ch in enumerate(text):
+- g, coordinates = self.getGlyph(ch)
+- w, h = self.getStringSize(ch, scale = scale)
+- tx1, ty1, tx2, ty2 = coordinates
+-
+- # Set the initial texture
+- if currentTexture is None:
+- currentTexture = g
+-
+- # If the texture changed, flush the geometry
+- if currentTexture != g:
+- cacheEntry.append((currentTexture, vertexCount, numpy.array(vertices[:vertexCount]), numpy.array(texCoords[:vertexCount])))
+- currentTexture = g
+- vertexCount = 0
+-
+- vertices[vertexCount + 0] = (x, y)
+- vertices[vertexCount + 1] = (x + w, y)
+- vertices[vertexCount + 2] = (x + w, y + h)
+- vertices[vertexCount + 3] = (x, y + h)
+- texCoords[vertexCount + 0] = (tx1, ty2)
+- texCoords[vertexCount + 1] = (tx2, ty2)
+- texCoords[vertexCount + 2] = (tx2, ty1)
+- texCoords[vertexCount + 3] = (tx1, ty1)
+- vertexCount += 4
+-
+- x += w * direction[0]
+- y += w * direction[1]
+- cacheEntry.append((currentTexture, vertexCount, vertices[:vertexCount], texCoords[:vertexCount]))
+-
+- # Don't store very short strings
+- if len(text) > 5:
+- # Limit the cache size
+- if len(self.stringCache) > self.stringCacheLimit:
+- del self.stringCache[self.stringCache.keys()[0]]
+- self.stringCache[(text, scale)] = cacheEntry
+- else:
+- cacheEntry = self.stringCache[(text, scale)]
+-
+- glPushMatrix()
+- glTranslatef(pos[0], pos[1], 0)
+- for texture, vertexCount, vertices, texCoords in cacheEntry:
+- texture.bind()
+- glVertexPointer(2, GL_FLOAT, 0, vertices)
+- glTexCoordPointer(2, GL_FLOAT, 0, texCoords)
+- glDrawArrays(GL_QUADS, 0, vertexCount)
+- glPopMatrix()
+-
+- def render(self, text, pos = (0, 0), direction = (1, 0), scale = 0.002):
++ def render(self, text, pos = (0, 0), direction = (1, 0, 0), scale = 0.002):
+ """
+ Draw some text.
+
+@@ -169,43 +105,75 @@
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY)
+
+ scale *= self.scale
+-
++ glPushMatrix()
++ glTranslatef(pos[0], pos[1], 0)
++
+ if self.reversed:
+ text = "".join(reversed(text))
+
+ if self.outline:
+ glPushAttrib(GL_CURRENT_BIT)
+- glColor4f(0, 0, 0, glGetFloatv(GL_CURRENT_COLOR)[3])
+- self._renderString(text, (pos[0] + 0.003, pos[1] + 0.003), direction, scale)
++ glPushMatrix()
++ glColor4f(0, 0, 0, .25 * glGetDoublev(GL_CURRENT_COLOR)[3])
++ for ch in text:
++ g = self.getGlyph(ch)
++ w, h = self.getStringSize(ch, scale = scale)
++ tw, th = g.size
++
++ glVertexPointerf([(0.0, 0.0, 0.0), (w, 0.0, 0.0), (0.0, h, 0.0), (w, h, 0.0)])
++ glTexCoordPointerf([(0.0, th), (tw, th), (0.0, 0.0), (tw, 0.0)])
++
++ g.bind()
++
++ blur = 2 * 0.002
++ for offset in [(-.7, -.7), (0, -1), (.7, -.7), (-1, 0), (1, 0), (-.7, .7), (0, 1), (.7, .7)]:
++ glPushMatrix()
++ glTranslatef( blur * offset[0], blur * offset[1], 0)
++ glDrawElementsui(GL_TRIANGLE_STRIP, [0, 1, 2, 3])
++ glPopMatrix()
++
++ glTranslatef(w * direction[0],
++ w * direction[1],
++ w * direction[2])
++
+ glPopAttrib()
++ glPopMatrix()
++
++ for ch in text:
++ g = self.getGlyph(ch)
++ w, h = self.getStringSize(ch, scale = scale)
++ tw, th = g.size
++
++ glVertexPointerf([(0.0, 0.0, 0.0), (w, 0.0, 0.0), (0.0, h, 0.0), (w, h, 0.0)])
++ glTexCoordPointerf([(0.0, th), (tw, th), (0.0, 0.0), (tw, 0.0)])
++
++ g.bind()
++ glDrawElementsui(GL_TRIANGLE_STRIP, [0, 1, 2, 3])
++
++ glTranslatef(w * direction[0],
++ w * direction[1],
++ w * direction[2])
++
++ glPopMatrix()
+
+- self._renderString(text, pos, direction, scale)
+-
+ glDisableClientState(GL_VERTEX_ARRAY)
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY)
+ glDisable(GL_TEXTURE_2D)
+
+- def _allocateGlyphTexture(self):
+- t = TextureAtlas(size = glGetInteger(GL_MAX_TEXTURE_SIZE))
+- t.texture.setFilter(GL_LINEAR, GL_LINEAR)
+- t.texture.setRepeat(GL_CLAMP, GL_CLAMP)
+- self.glyphTextures.append(t)
+- return t
+-
+ def getGlyph(self, ch):
+ """
+- Get a (L{Texture}, coordinate tuple) pair for a given character.
++ Get the L{Texture} for a given character.
+
+ @param ch: Character
+- @return: (L{Texture} instance, coordinate tuple)
++ @return: L{Texture} instance
+ """
+ try:
+ return self.glyphCache[ch]
+ except KeyError:
+ s = self.font.render(ch, True, (255, 255, 255))
+
+- # Draw outlines
+ """
++ # Draw outlines
+ import Image, ImageFilter
+ srcImg = Image.fromstring("RGBA", s.get_size(), pygame.image.tostring(s, "RGBA"))
+ img = Image.fromstring("RGBA", s.get_size(), pygame.image.tostring(s, "RGBA"))
+@@ -222,19 +190,11 @@
+ img.putpixel((x, y), (0, 0, 0, a / n))
+ s = pygame.image.fromstring(img.tostring(), s.get_size(), "RGBA")
+ """
+-
+- if not self.glyphTextures:
+- texture = self._allocateGlyphTexture()
+- else:
+- texture = self.glyphTextures[-1]
+-
+- # Insert the texture into the glyph cache
+- try:
+- coordinates = texture.add(s)
+- except TextureAtlasFullException:
+- # Try again with a fresh atlas
+- texture = self._allocateGlyphTexture()
+- return self.getGlyph(ch)
+-
+- self.glyphCache[ch] = (texture, coordinates)
+- return (texture, coordinates)
++
++ t = Texture()
++ t.setFilter(GL_LINEAR, GL_LINEAR)
++ t.setRepeat(GL_CLAMP, GL_CLAMP)
++ t.loadSurface(s, alphaChannel = True)
++ del s
++ self.glyphCache[ch] = t
++ return t
Modified: packages/trunk/fretsonfire/debian/patches/series
===================================================================
--- packages/trunk/fretsonfire/debian/patches/series 2007-12-05 10:59:11 UTC (rev 4851)
+++ packages/trunk/fretsonfire/debian/patches/series 2007-12-05 15:41:18 UTC (rev 4852)
@@ -2,3 +2,4 @@
svg.patch
stage.ini.patch
typeerror.patch
+font-revert.patch
More information about the Pkg-games-commits
mailing list