Мне нужно что-то намного быстрее, чем glutBitmapCharacter (шрифт, текст [i]).Это снижает производительность в несколько раз!Мне нужно отобразить fps, положение xyz и т. Д., А не в 3D, просто отображая HUD.
В настоящее время я использую:
glRasterPos2f(x,y);
for (int i=0; i<text.size(); i++)
{
glutBitmapCharacter(font, text[i]);
}
Я использую эту функцию:
void glutPrint(float x, float y, LPVOID font, string text)
{
glRasterPos2f(x,y);
for (int i=0; i<text.size(); i++)
{
glutBitmapCharacter(font, text[i]);
}
}
Каждый кадр в функции DisplayFunction в секции рисования HUD (вызывая DrawHUD ()):
void DrawHUD (void)
{
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0, windowWidth, windowHeight, 0.0, -1.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT);
glColor3f(0.2f,0.2f,0.2f);
glutPrint(2,10,glutFonts[4],its(sfps)+" fps; "+its(todrawquads)+" quads drawing; ");
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
}
Также используя функцию int to string:
string its(int i)
{
stringstream out;
out << i;
return out.str();
}
некоторые факты о производительности (измеряется в FPS)
Без вызова функции DrawHUD ~ 3500
С вызовом функции DrawHUD ~ 3500 (возможно, несколько меньше кадров в секунду)
с DrawHUD + 1 x GlutPrint ~ 3300
с DrawHUD + 2 x GlutPrint ~ 2400
с DrawHUD + 3 x GlutPrint ~ 1700
(например, когда я имею в виду 3 x GlutPrint Я имел в виду в DrawHUD:
{
[...]
glutPrint(...);
glutPrint(...);
glutPrint(...);
[...]
}
)
Это не такхорошо ... я знаю, что измерение с использованием частоты кадров не очень хорошо.
также
, когда я прокомментировал:
glutBitmapCharacter (шрифт, текст [i]);
в цикле в glutPrint tздесь было ~ 3500 кадров в секунду ... так что я УВЕРЕН , что glutBitmapCharacter - проблема.Так что использовать вместо этого :)?
Тогда что делать?