Browse Source

Fixed some bugs with font drawing and reverted the display list change - it was causing problems with multiple fonts

Bill Meltsner 15 years ago
parent
commit
046f2a3084

+ 2 - 2
src/modules/font/GlyphData.cpp

@@ -126,8 +126,8 @@ namespace font
 		int pw = next_p2(w);
 		int ph = next_p2(h);
 		unsigned char * d = new unsigned char[pw * ph * (format == GlyphData::FORMAT_LUMINOSITY_ALPHA ? 2 : 4)];
-		for (int i = 0; i < pw; i++) {
-			for (int j = 0; j < ph; j++) {
+		for (int j = 0; j < ph; j++) {
+			for (int i = 0; i < pw; i++) {
 				int n = i+j*w;
 				int p = i+j*pw;
 				if (i < w && j < h) {

+ 4 - 9
src/modules/graphics/opengl/Font.cpp

@@ -38,10 +38,7 @@ namespace opengl
 		for(unsigned int i = 0; i < MAX_CHARS; i++)
 		{
 			glyphs[i] = new Glyph(data->getGlyphData(i));
-			glyphs[i]->load(); 
-			glNewList(list + i, GL_COMPILE);
-			glyphs[i]->draw(0, 0, 0, 1, 1, 0, 0);
-			glEndList();
+			glyphs[i]->load();
 			widths[i] = data->getGlyphData(i)->getWidth();
 			spacing[i] = data->getGlyphData(i)->getAdvance();
 			bearingX[i] = data->getGlyphData(i)->getBearingX();
@@ -71,16 +68,14 @@ namespace opengl
 		glTranslatef(ceil(x), ceil(y), 0.0f);
 		glRotatef(LOVE_TODEG(angle), 0, 0, 1.0f);
 		glScalef(sx, sy, 1.0f);
-		int first = (int)text[0];
-		int s = -bearingX[first];
 		for (unsigned int i = 0; i < text.size(); i++) {
 			int g = (int)text[i];
 			if (!glyphs[g]) g = 32; // space
 			glPushMatrix();
-			glTranslatef(bearingX[g] + s, -bearingY[g]+height, 0.0f);
-			glCallList(list+g);
+			glTranslatef(0, height, 0);
+			glyphs[g]->draw(0, 0, 0, 1, 1, 0, 0);
 			glPopMatrix();
-			s += spacing[g] * mSpacing;
+			glTranslatef(spacing[g], 0, 0);
 		}
 		glPopMatrix();
 	}

+ 1 - 0
src/modules/graphics/opengl/Glyph.cpp

@@ -68,6 +68,7 @@ namespace opengl
 		glPushMatrix();
 
 		glMultMatrixf((const GLfloat*)t.getElements());
+		glTranslatef(data->getBearingX(), -data->getBearingY(), 0.0f);
 
 		glEnableClientState(GL_VERTEX_ARRAY);
 		glEnableClientState(GL_TEXTURE_COORD_ARRAY);