函数使用C++/OpenGL/Glut在屏幕上绘制文本的速度比glutBitmapCharacter快
Function to draw text on screen using C++/OpenGL/Glut faster than glutBitmapCharacter
我需要比glutBitmapCharacter(font,text[I])更快的muuuch。性能下降了好几次!我需要显示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]);
}
}
绘图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到字符串函数:
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(字体,text[i]);
在glutPrint的循环中,有大约3500帧/秒。。。所以我确信glutBitmapCharacter是个问题。那么它有什么用呢:)?
那该怎么办?
如果有疑问,请回到基础:创建自己的(更好的)绘图函数。制作一个矩形的字符纹理,并在屏幕上绘制连续的四边形(三角形条纹),选择字体纹理,每个字符串一个条纹。
如果你选择走这条路,上面的内容仍然适用于VBO。唯一重要的是尽可能多地缓冲写入,可能是通过将要打印到屏幕上的东西添加到排序数组中,并在帧绘制结束时同时将它们写出来。
相关文章:
- SFML 文本未绘制在窗口上
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 绘制文本问题
- SFML 2.4.2 - 绘制文本时出现分段错误
- 在 Qt C++ 中在自定义项委托上绘制文本时的性能问题
- QTool按钮上的文本未绘制
- 如何在透视视图中绘制文本
- Qt:用不同的字体绘制文本
- Linux绘制文本模式(无GUI,桌面)
- 如何在MFC中一一绘制单独的文本
- 使用Glstipple时,Oglft绘制文本
- 绘制文本和文本剪辑
- 有效地在 QPainterPath 周围绘制文本
- DirectWrite GDI 互操作:使用"IDWriteFontFace"绘制文本的简单方法
- 如何从文本中绘制这些数据
- DrawStatustext仅在后续呼叫上不在第一次呼叫上绘制文本
- SFML 在绘制文本时崩溃
- QPainter 未正确绘制文本
- 将文本绘制到屏幕
- 如何使用 WinAPI 将文本绘制到字节数组