OpenGL表现得非常慢

时间:2011-09-26 10:23:24

标签: c++ performance opengl

在游戏上工作,我正在测试我的渲染器。遗憾的是,它仅以每秒约4帧的速度运行。分析显示,令人惊讶的是,只有5%的运行时属于我的代码,其余95%的总运行时间用于nvoglnt.dll

虽然只使用了一个256x256纹理,但除此之外,我在一些相机转换之外使用的唯一openGL代码就是下面的代码模板。它仅执行134217728次,总共33554432个四边形。

glTexCoord2f(u, v);
glColor3f(r, g, b);
glVertex3f(x, y, z);

我可能做错了导致OpenGL变得如此之慢?我可以使用任何常用的性能技术来改进它吗?

2 个答案:

答案 0 :(得分:4)

正如datenwolf所说,134217728 很多次。如果你使用顶点数组,那么3300万个四边形甚至很多。但现代卡应该能很好地处理它。

这里的瓶颈完全是CPU,你每帧调用1.34亿x 3个函数。因为你的运行速度是4FPS。这是16亿次函数调用!难怪它的运行速度很慢。

您应该使用的是顶点缓冲区对象。无论数据的易变性如何,即使您必须每帧更新一次, 也会更快。

有了这个,我很好奇为什么你需要渲染3300万个易失性四边形?如果您向我们提供更广泛的概述,我们可以提出其他优化技术。

答案 1 :(得分:3)

  

总共33554432个四边形仅执行134217728次。

每个“少数”调用都会使您的系统在程序和OpenGL驱动程序之间切换执行上下文。这不是“少数”。老实说,我认为这个问题很精细,因为现在每一个OpenGL教程都会告诉你不要使用立即模式来判断你观察到的严重性能,立即模式导致,即glBegin ,glEnd,glVertex等。

使用顶点阵列或更好的顶点缓冲区对象