00001
00002
00009
00010
#include "affichage_font.h"
00011
#include "ctrl_fenetre.h"
00012
#include "../lib/gtl/include/gtl.h"
00013
00014 CFont::CFont ()
00015 {
00016 m_fCouleur [0] = 1;
00017 m_fCouleur [1] = 1;
00018 m_fCouleur [2] = 1;
00019 }
00020
00021 CFont::~CFont ()
00022 {
00023
00024 }
00025
00026 void CFont::Couleur (
float r,
float g,
float b)
00027 {
00028 m_fCouleur [0] =
r;
00029 m_fCouleur [1] =
g;
00030 m_fCouleur [2] =
b;
00031 }
00032
00033
00034 void CFont::Print (EFontPosition FontPosition,
const char *szMsg, ...)
00035 {
00036
char szText[256];
00037 va_list ap;
00038
00039
00040 memset (szText,
'\0', 256);
00041
00042
if (szMsg == 0)
00043
return;
00044
00045
00046 va_start (ap, szMsg);
00047 vsprintf (szText, szMsg, ap);
00048 va_end (ap);
00049
00050
00051
00052
int iLongeur = strlen (szMsg);
00053
00054
00055 glEnable (GL_TEXTURE_2D);
00056
00057 glEnable (GL_BLEND);
00058
00059 glBlendFunc (GL_SRC_ALPHA, GL_ONE);
00060
00061
00062 glColor3fv (m_fCouleur);
00063 glPushMatrix ();
00064 glLoadIdentity ();
00065
switch (FontPosition)
00066 {
00067
default:
00068
case FONT_POSITION_CENTRE:
00069 glTranslated (
FENETRE_LARGEUR / 2 - iLongeur * 12 / 2,
FENETRE_HAUTEUR / 2, 0);
00070
break;
00071
case FONT_POSITION_CENTRE_HAUT:
00072 glTranslated (
FENETRE_LARGEUR / 2 - iLongeur * 12 / 2,
FENETRE_HAUTEUR - 16, 0);
00073
break;
00074 }
00075 glListBase (m_uiDisplayList);
00076
00077
00078 glCallLists (strlen (szText), GL_UNSIGNED_BYTE, szText);
00079 glPopMatrix ();
00080
00081
00082 glDisable (GL_BLEND);
00083
00084 glDisable (GL_TEXTURE_2D);
00085 }
00086
00087
00088 void CFont::Print (EFontPosition FontPosition,
int y,
const char *szMsg, ...)
00089 {
00090
char szText[256];
00091 va_list ap;
00092
00093 memset (szText,
'\0', 256);
00094
00095
if (szMsg == 0)
00096
return;
00097
00098
00099 va_start (ap, szMsg);
00100 vsprintf (szText, szMsg, ap);
00101 va_end (ap);
00102
00103
00104
00105
int iLongeur = strlen (szMsg);
00106
00107
00108 glEnable (GL_TEXTURE_2D);
00109
00110 glEnable (GL_BLEND);
00111
00112 glBlendFunc (GL_SRC_ALPHA, GL_ONE);
00113
00114 glColor3fv (m_fCouleur);
00115 glPushMatrix ();
00116 glLoadIdentity ();
00117
switch (FontPosition)
00118 {
00119
default:
00120
case FONT_POSITION_CENTRE:
00121 glTranslated (
FENETRE_LARGEUR / 2 - iLongeur * 12 / 2,
y, 0);
00122
break;
00123 }
00124 glListBase (m_uiDisplayList);
00125
00126
00127 glCallLists (strlen (szText), GL_UNSIGNED_BYTE, szText);
00128 glPopMatrix ();
00129
00130
00131 glDisable (GL_BLEND);
00132
00133 glDisable (GL_TEXTURE_2D);
00134 }
00135
00136
00137 void CFont::Print (
int x,
int y,
const char *szMsg, ...)
00138 {
00139
char szText[256];
00140 va_list ap;
00141
00142 memset (szText,
'\0', 256);
00143
00144
if (szMsg == 0)
00145
return;
00146
00147
00148 va_start (ap, szMsg);
00149 vsprintf (szText, szMsg, ap);
00150 va_end (ap);
00151
00152
00153 glEnable (GL_TEXTURE_2D);
00154
00155 glEnable (GL_BLEND);
00156
00157 glBlendFunc (GL_SRC_ALPHA, GL_ONE);
00158
00159 glColor3fv (m_fCouleur);
00160 glPushMatrix ();
00161 glLoadIdentity ();
00162 glTranslated (
x,
y, 0);
00163 glListBase (m_uiDisplayList);
00164
00165
00166 glCallLists (strlen (szText), GL_UNSIGNED_BYTE, szText);
00167 glPopMatrix ();
00168
00169
00170 glDisable (GL_BLEND);
00171
00172 glDisable (GL_TEXTURE_2D);
00173 }
00174
00175 void CFont::ChargerTexture (
const char* szTexture)
00176 {
00177 gtl::CImageTGA Image (szTexture);
00178
int iLargeur = Image.GetSizeX ();
00179
int iHauteur = Image.GetSizeY ();
00180
00181
00182
00183 glGenTextures (1, &m_uiTexture);
00184
00185 glBindTexture (GL_TEXTURE_2D, m_uiTexture);
00186
00187 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
00188
00189 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
00190
00191 glTexImage2D (GL_TEXTURE_2D, 0, 3, Image.GetSizeX (), Image.GetSizeY (), 0,
GL_BGR, GL_UNSIGNED_BYTE, Image.GetData ());
00192
00193
00194 m_uiDisplayList = glGenLists (256);
00195
for (
int i = 0; i < 256; i++)
00196 {
00197
float fTexCoordX = float (i%16) / 16.0f;
00198
float fTexCoordY = float (i/16) / 16.0f;
00199
00200
00201 glNewList (m_uiDisplayList + i, GL_COMPILE);
00202
00203
00204
00205 glBindTexture (GL_TEXTURE_2D, m_uiTexture);
00206
00207 glBegin (GL_QUADS);
00208
00209 glTexCoord2f (fTexCoordX, 1.0f - fTexCoordY - 0.0625f);
00210 glVertex2f (0, 0);
00211
00212
00213 glTexCoord2f (fTexCoordX + 0.0625f, 1.0f - fTexCoordY - 0.0625f);
00214 glVertex2f (iLargeur / 16.f, 0);
00215
00216
00217 glTexCoord2f (fTexCoordX + 0.0625f, 1.0f - fTexCoordY);
00218 glVertex2f (iLargeur / 16.f, iHauteur / 16.f);
00219
00220
00221 glTexCoord2f (fTexCoordX, 1.0f - fTexCoordY);
00222 glVertex2f (0, iHauteur / 16.f);
00223 glEnd ();
00224 glTranslated (12.f, 0, 0);
00225 glEndList ();
00226 }
00227 }