【发布时间】:2014-03-06 19:42:37
【问题描述】:
好吧,在有人想杀我之前,我知道我应该离开这个被上帝遗弃的技术,在 OpenGL 中进行绘图。但我正在编写一个简单的 2D 游戏,我对 VBO 和着色器了解不多。所以我使用立即模式来用多边形填充屏幕,但我读到显示列表应该比立即模式快得多。所以我去尝试了它,但我得到了使用即时模式获得的 FPS 的一半。我没有在每一帧中初始化列表,我使用下面的 for 循环来绘制网格:
glPushMatrix();
for(int y = 0; y < 56; y++)
{
for(int x = 0; x < 80; x++)
{
glCallList(grid);
glTranslatef(GRID_WIDTH, 0.0f, 0.0f);
}
glTranslatef(-80*GRID_WIDTH, GRID_HEIGHT, 0.0f);
}
glPopMatrix();
我不认为 for 循环是罪魁祸首,因为我尝试了相同的代码,但我将 glCallList 更改为立即模式代码并且 FPS 仍然更高。为什么会这样?
【问题讨论】:
-
在这种情况下,您可能希望将整个网格呈现到显示列表中。虽然这需要在
GRID_WIDTH更改时重新构建列表,但这仍然可以在运行时完成,几乎不会影响性能(假设值不经常更改,例如当用户更改 UI 大小或调整窗口大小时)。