1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
void DLLFUNC VGL_TTF_Font::Print(int x, int y, const char *fmt , ...)
{
va_list ap;
unsigned char buffer[256];
// Allow formatted output
va_start(ap, fmt);
vsprintf((char*)buffer, fmt, ap);
va_end(ap);
int l = strlen((char*)buffer);
if (x == VGL_CENTER_X) {
float width = 0;
for (int z=0;z<l;z++) width+=(widths[z]/1.33f)*scale;
x = 400 - (int)(width/2);
}
tex->Bind();
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glEnable(GL_BLEND);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION); // matrice 2d
glPushMatrix(); // pousse la matrice sur la pile
glLoadIdentity();
glOrtho(0,800,0,600,-1,1); // un plan de 800*600 pixels
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glBegin(GL_QUADS);
for(int a = 0; a < l; a++)
{
unsigned char c = buffer[a];
glTexCoord2fv(coords[c][0]); glVertex2f(x, y + height);
glTexCoord2fv(coords[c][1]); glVertex2f(x + widths[c], y + height);
glTexCoord2fv(coords[c][2]); glVertex2f(x + widths[c], y);
glTexCoord2fv(coords[c][3]); glVertex2f(x, y);
x += widths[c];
}
glEnd();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
} |
Partager