diff options
| author | icculus <icculus@5198baeb-e213-0410-be47-fc2ff85ca46f> | 2003-01-02 21:06:00 +0000 |
|---|---|---|
| committer | icculus <icculus@5198baeb-e213-0410-be47-fc2ff85ca46f> | 2003-01-02 21:06:00 +0000 |
| commit | e17acec1c9bec3a26d97ca2873bb77bdcb48665e (patch) | |
| tree | 26b14b6cedcb70df651c23dddbf0981970d0bd4d /Source/Text.cpp | |
| parent | 59ca62d601e30b5467f8ecd2cb7d517bc682fc12 (diff) | |
| download | blackshades-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.cpp | 92 |
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 ); +} |
