Текст в в OpenGL программах

Ниже приведено две функции, первая вызывается в той части программы где происходит инициализация, она создает фонт нужного типа и размера:

FuncCreateFont("Courier New", FONT_HEIGHT);

Вторая функция выводит текст, ее следует использовать в той части программы где происходит вывод изображений на экран:

glPrint(const char *text):

В нашем примере внутри Render_Scene() вызывается glPrint():


#define FONT_HEIGHT 20
#define MAX_CHARS 256
unsigned int g_FontListID;

GLvoid FuncCreateFont(char *strFontName, int height);
GLvoid glPrint(const char *text);
GLvoid Render_Scene();

GLvoid CMyApp::FuncCreateFont(char *strFontName, int height)
{
HFONT font;
HFONT oldfont;
g_FontListID = glGenLists(MAX_CHARS);
font = CreateFont( height,
0,
0,
0,
FW_BOLD,
FALSE,
FALSE,
FALSE,
ANSI_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
FF_DONTCARE|DEFAULT_PITCH,
strFontName);
oldfont = (HFONT)SelectObject(hDC, font);
wglUseFontBitmaps(hDC, 0, MAX_CHARS - 1, g_FontListID);
SelectObject(hDC, oldfont);
DeleteObject(font);
}


GLvoid CMyApp::glPrint(const char *text) {
glPushAttrib(GL_LIST_BIT);
glListBase(g_FontListID);
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
glPopAttrib();
}


GLvoid CMyApp::Render_Scene()
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor4f(0, 1, 0, 1);
glTranslatef(0.0f, 0.0f, -50.0f);
glRasterPos2f( -26.0, 19.0);
//char *pTemp = {"hello my program!"};
//glPrint(pTemp); // печатаем текст на экране
//в нашем примере из класса таймера получаем FPS
//затем выводим значение на экран
int n_fps = mTimer.CalculateFPS();
char pTemp[256];
sprintf(pTemp, "FPS %d", n_fps);
glDisable(GL_TEXTURE_2D);
glPrint(pTemp); //печатаем текст на экране
glEnable(GL_TEXTURE_2D);
}