使用比glutBitmapCharacter更快的C ++ / OpenGL / Glut在屏幕上绘制文本的功能

时间:2011-06-17 11:56:32

标签: c++ opengl text drawing glut

我需要比glutBitmapCharacter(font,text [i])更快的东西。它的性能正在下降几次!我需要显示fps,xyz位置等,所以不要只显示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]);
    }
}

绘制HUD部分的DisplayFunction中的每一帧(调用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 function:

string its(int i)
{
stringstream out;
out << i;
return out.str();
}

关于性能的一些事实(以FPS衡量)

不调用DrawHUD函数 ~3500

调用DrawHUD函数 ~3500 (可能少几个fps)

使用DrawHUD + 1 x GlutPrint ~3300

使用DrawHUD + 2 x GlutPrint 〜2400

使用DrawHUD + 3 x GlutPrint ~1700

(例如,当我的意思是 3 x GlutPrint 我的意思是在DrawHUD中:

{
[...]

glutPrint(...);
glutPrint(...);
glutPrint(...);

[...]
}

那不好......我知道使用帧率进行测量并不好。

当我评论时:

glutBitmapCharacter(font,text [i]);

在glutPrint的循环中,有~3500 fps ...所以我确定表明glutBitmapCharacter存在问题。那么有什么用呢:)?

那该怎么办?

1 个答案:

答案 0 :(得分:1)

如有疑问,请回到基础:创建自己的(更好)绘图功能。制作矩形纹理字符,并在屏幕上绘制连续的四边形(三角形条带),选择字体纹理,每个字符串一个条带。

如果你选择走那条路,上面的话仍然适合VBO。唯一重要的是尽可能地缓冲写入,也许是通过添加东西来打印到屏幕上的各种类型并在帧结束时将它们写出来同时