00001
00009 #include "scene.h"
00011 #define FONT_SPACING 10
00012
00017 void TScene::BuildFont()
00018 {
00019 float cx,cy;
00020
00021
00022 font2D_bkg.Load("font_bkg",BASE,"data/font_bkg.tga",MODULATE,1.0,1.0,1.0,false,false,-1);
00023 font2D_tex.Load("font",BASE,"data/font.tga",MODULATE,1.0,1.0,1.0,false,false,-1);
00024
00025 font2D = glGenLists(256);
00026 glBindTexture(GL_TEXTURE_2D, font2D_tex.GetID());
00027
00028 for (int i = 0; i < 16; i++)
00029 {
00030 for(int j = 0; j < 16; j++)
00031 {
00032 cx = j/16.0f;
00033 cy = i/16.0f;
00034
00035 glNewList(font2D+i*16+j,GL_COMPILE);
00036 glBegin(GL_QUADS);
00037 glTexCoord2f(cx,1.0f - cy - 0.0625f); glVertex2i(0,0);
00038 glTexCoord2f(cx + 0.0625f, 1.0f -cy - 0.0625f); glVertex2i(16,0);
00039 glTexCoord2f(cx + 0.0625f, 1.0f - cy); glVertex2i(16,16);
00040 glTexCoord2f(cx, 1.0f - cy); glVertex2i(0,16);
00041 glEnd();
00042
00043 glTranslated(FONT_SPACING,0,0);
00044 glEndList();
00045 }
00046 }
00047 }
00048
00049
00058 void TScene::DrawScreenText(const char *s, float px, float py, float size)
00059 {
00060
00061
00062 float x = resx*(px/100.0f);
00063 float y = resy*(py/100.0f);
00064 float sizex = size*FONT_SPACING*strlen(s);
00065 float sizey = FONT_SPACING*size;
00066 float offsetx = 2.0f*sizex/3.0f;
00067
00069 glUseProgram(0);
00070
00071
00072 glMatrixMode(GL_PROJECTION);
00073 glPushMatrix();
00074 glLoadIdentity();
00075
00076 glOrtho(0,resx,0,resy,-1,1);
00077
00078 glMatrixMode(GL_MODELVIEW);
00079 glPushMatrix();
00080 glLoadIdentity();
00081
00082 glActiveTexture(GL_TEXTURE0);
00083 glEnable(GL_TEXTURE_2D);
00084 glDisable(GL_DEPTH_TEST);
00085
00086
00087 glColor4f(1.0,1.0,1.0,1.0);
00088 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);
00089 glEnable(GL_BLEND);
00090 glBindTexture(GL_TEXTURE_2D, font2D_bkg.GetID());
00091 glBegin(GL_QUADS);
00092 glTexCoord2f(0.0,0.0); glVertex2f(x - offsetx, y - sizey);
00093 glTexCoord2f(1.0,0.0); glVertex2f(x + offsetx, y - sizey);
00094 glTexCoord2f(1.0,1.0); glVertex2f(x + offsetx, y + 2*sizey);
00095 glTexCoord2f(0.0,1.0); glVertex2f(x - offsetx, y + 2*sizey);
00096 glEnd();
00097
00098
00099 glBindTexture(GL_TEXTURE_2D, font2D_tex.GetID());
00100 glColor4f(1.0,0.5,0.0,1.0);
00101 glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
00102
00103 glTranslatef(x - sizex/2,y - sizey/2,0);
00104 glListBase(font2D);
00105 glScalef(size,size,size);
00106 glCallLists(strlen(s),GL_BYTE,s);
00107
00108
00109 glMatrixMode(GL_PROJECTION);
00110 glPopMatrix();
00111 glMatrixMode(GL_MODELVIEW);
00112 glPopMatrix();
00113
00114 glEnable(GL_DEPTH_TEST);
00115 glDisable(GL_TEXTURE_2D);
00116 glDisable(GL_BLEND);
00117 }