aboutsummaryrefslogtreecommitdiff
path: root/Source/Text.cpp
diff options
context:
space:
mode:
authoricculus <icculus@5198baeb-e213-0410-be47-fc2ff85ca46f>2003-01-02 21:06:00 +0000
committericculus <icculus@5198baeb-e213-0410-be47-fc2ff85ca46f>2003-01-02 21:06:00 +0000
commite17acec1c9bec3a26d97ca2873bb77bdcb48665e (patch)
tree26b14b6cedcb70df651c23dddbf0981970d0bd4d /Source/Text.cpp
parent59ca62d601e30b5467f8ecd2cb7d517bc682fc12 (diff)
downloadblackshades-e17acec1c9bec3a26d97ca2873bb77bdcb48665e.tar.gz
Initial revision
git-svn-id: svn://svn.icculus.org/blackshades/trunk@2 5198baeb-e213-0410-be47-fc2ff85ca46f
Diffstat (limited to 'Source/Text.cpp')
-rw-r--r--Source/Text.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/Source/Text.cpp b/Source/Text.cpp
new file mode 100644
index 0000000..2b64b4b
--- /dev/null
+++ b/Source/Text.cpp
@@ -0,0 +1,92 @@
+/**> HEADER FILES <**/
+#include "Text.h"
+
+void Text::LoadFontTexture(char *fileName)
+{
+ TGAImageRec *tempTexture;
+ GLuint type;
+
+ //Load Image
+ tempTexture = LoadTGA( fileName );
+ //Is it valid?
+ if(tempTexture){
+ //Alpha channel?
+ if ( tempTexture->bpp == 24 )
+ type = GL_RGB;
+ else
+ type = GL_RGBA;
+
+ glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
+
+ glGenTextures( 1, &FontTexture );
+ glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
+
+ glBindTexture( GL_TEXTURE_2D, FontTexture);
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
+
+ gluBuild2DMipmaps( GL_TEXTURE_2D, type, tempTexture->sizeX, tempTexture->sizeY, type, GL_UNSIGNED_BYTE, tempTexture->data );
+ free( tempTexture->data );
+ free( tempTexture );
+ }
+}
+
+void Text::BuildFont() // Build Our Font Display List
+{
+ float cx; // Holds Our X Character Coord
+ float cy; // Holds Our Y Character Coord
+ int loop;
+
+ base=glGenLists(256); // Creating 256 Display Lists
+ glBindTexture(GL_TEXTURE_2D, FontTexture); // Select Our Font Texture
+ for (loop=0; loop<256; loop++) // Loop Through All 256 Lists
+ {
+ cx=float(loop%16)/16.0f; // X Position Of Current Character
+ cy=float(loop/16)/16.0f; // Y Position Of Current Character
+
+ glNewList(base+loop,GL_COMPILE); // Start Building A List
+ glBegin(GL_QUADS); // Use A Quad For Each Character
+ glTexCoord2f(cx,1-cy-0.0625f+.001); // Texture Coord (Bottom Left)
+ glVertex2i(0,0); // Vertex Coord (Bottom Left)
+ glTexCoord2f(cx+0.0625f,1-cy-0.0625f+.001); // Texture Coord (Bottom Right)
+ glVertex2i(16,0); // Vertex Coord (Bottom Right)
+ glTexCoord2f(cx+0.0625f,1-cy-.001); // Texture Coord (Top Right)
+ glVertex2i(16,16); // Vertex Coord (Top Right)
+ glTexCoord2f(cx,1-cy-+.001); // Texture Coord (Top Left)
+ glVertex2i(0,16); // Vertex Coord (Top Left)
+ glEnd(); // Done Building Our Quad (Character)
+ glTranslated(10,0,0); // Move To The Right Of The Character
+ glEndList(); // Done Building The Display List
+ } // Loop Until All 256 Are Built
+}
+
+void Text::glPrint(GLint x, GLint y, char *string, int set, float size, float width, float height) // Where The Printing Happens
+{
+ if (set>1)
+ {
+ set=1;
+ }
+ glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
+ glBindTexture(GL_TEXTURE_2D, FontTexture); // Select Our Font Texture
+ glDisable(GL_DEPTH_TEST); // Disables Depth Testing
+ glDisable(GL_LIGHTING);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
+ glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
+ glPushMatrix(); // Store The Projection Matrix
+ glLoadIdentity(); // Reset The Projection Matrix
+ glOrtho(0,width,0,height,-100,100); // Set Up An Ortho Screen
+ glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ glPushMatrix(); // Store The Modelview Matrix
+ glLoadIdentity();
+ glScalef(size,size,1); // Reset The Modelview Matrix
+ glTranslated(x,y,0); // Position The Text (0,0 - Bottom Left)
+ glListBase(base-32+(128*set)); // Choose The Font Set (0 or 1)
+ glCallLists(strlen(string),GL_BYTE,string); // Write The Text To The Screen
+ glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
+ glPopMatrix(); // Restore The Old Projection Matrix
+ glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
+ glPopMatrix(); // Restore The Old Projection Matrix
+ glEnable(GL_DEPTH_TEST); // Enables Depth Testing
+ glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
+}