OpenGL执行很慢

OpenGL performing very slowly

本文关键字:执行 OpenGL      更新时间:2023-10-16

制作一款游戏,我正在测试我的渲染器。不幸的是,它只能以每秒4帧的速度运行。分析显示,令人惊讶的是,只有5%的运行时属于我的代码,其余95%的总运行时间花在nvoglnt.dll上。

只使用了一个256x256纹理,除此之外,我在一些相机转换之外使用的唯一openGL代码是下面的代码模板。对于总共33554432个quads,它只执行134217728次。

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

我做错了什么,导致OpenGL变得如此缓慢?有什么常见的性能技巧可以用来改进它吗?

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

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

你应该做的是使用顶点缓冲对象。不管你的数据多么不稳定,即使你必须每帧更新它,它更快。

有了这些,我很好奇为什么你需要渲染3300万个易失性四元组?

如果你能给我们一个更广泛的概述,我们可以提出其他的优化技术。

对于33554432个quads,它只执行了134217728次。

这些"少数"调用中的每一个都使你的系统在你的程序和OpenGL驱动程序之间切换执行上下文。这不是"少数"。老实说,我认为这个问题是一个很好的问题,因为这些天的每一个OpenGL教程都会告诉你不要使用直接模式来处理你观察到的严重的性能影响,直接模式会导致,即glBegin, glEnd, glVertex等等。

使用顶点数组或更好的顶点缓冲对象