glBitmap问题

时间:2010-07-27 00:13:32

标签: performance opengl

我正在处理一些代码中的遗留代码以使用glBitmap()调用来绘制位图图标。我的问题是,一旦你同时绘制了大约1000个图标,它会相当慢。它减慢到大约1到2秒的刷新率,我想看看我是否能比它更快。

首先,我应该描述当前代码的工作原理。位图图标是32x32图像,每像素一位,预先加载到内存中。对于每个正在绘制的图标,代码执行:

glNewList后 glRasterPos2f glBitmap glEndList

然后在显示列表上调用glCallList()。我知道为每个图标重复调用glCallList()可能会非常慢,但是代码中的某些覆盖架构会使更改非常困难。

有没有其他方法可以加快速度而不重新设计整个事物?我几乎可以自由地做这种事情,但我必须能够为管理辩护。从glBitmap()更改为使用纹理映射的四边形会更快吗?我可以在单个显示列表中多次调用glBitmap(),只需为所有图标调用glCallList()一次吗?

我过去做过一些GL的东西,但已经有一段时间了。我很生疏,但我能把它解决掉。

2 个答案:

答案 0 :(得分:5)

纹理四边形。我使用它来渲染文本(图表的轴编号)并在屏幕上获得60 FPS和几百位数字,使用英特尔集成视频(几年前,所以它是GMA945代)。

将所有图标内容放入单个纹理中,只需调用glTexCoord选择所需的部分,然后避免切换纹理。

顺便说一句,因为你的图标是单色的(并且也是灰度图像),将它们存储在纹理的alpha通道中,然后你可以在输出四边形时选择实际的颜色。

答案 1 :(得分:1)

同意:使用屏幕对齐的四边形。设置你的模型视图矩阵以识别你的投影matric到gluOrtho(0,0,800,600,1,-1)。在(x,y,0)绘制四边形。 (小心他们的方向)

永远不要使用显示列表,它们是维护驾驶员开发人员的噩梦,可能不稳定

永远不要使用glBitmap或任何其他直接访问帧缓冲区的函数(glGetPixels& co)