c++ - OpenGL 显示列表优化

标签 c++ opengl optimization

我目前正在为我的应用程序运行一些速度测试,我正在尝试寻找更多方法来优化我的程序,特别是我的显示列表。目前我得到:

12 FPS,882,000 个顶点

40 FPS,234,000 个顶点

95 FPS,72,000 个顶点

我知道我需要尽量减少调用次数,所以不要:

for(int i = 0; i < Number; i++) {
   glBegin(GL_QUADS);
   ...normal and vertex declarations here
   glEnd();
}

更好的方法是这样做:

glBegin(GL_QUADS);
for(int i = 0; i < Number; i++) {
   ...normal and vertex declarations here
}
glEnd();

这确实有助于将我的 FPS 提高到上面列出的结果,但是,还有其他方法可以优化我的显示列表吗?也许通过使用嵌套顶点数组以外的其他东西来存储我的模型数据?

最佳答案

通过切换到 VBOs,您将获得显着的速度提升或至少 Vertex arrays .

立即模式 (glBegin()...glEnd()) 有很多方法调用开销。通过使用更现代的 OpenGL,我已经设法在笔记本电脑上以几百 fps 的速度渲染了约 100 万个顶点(如果没有物理引擎/实体系统开销,速度会更快)。

如果您想了解兼容性,大约 98% 的人支持 VBO 扩展(GL_ARB_vertex_buffer_object)http://feedback.wildfiregames.com/report/opengl/

关于c++ - OpenGL 显示列表优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944779/

相关文章:

c++ - 不是所有控制路径都返回值吗?

c++ - 在 C++ 类中注册 python 可调用对象

c++ - OpenGL 纹理的奇怪事件

Python 等价于内联函数或宏

mysql - varchar 和 int 列上的多重索引。但必须是全文

c++ - 如何进行手动代码矢量化,其性能优于边缘检测的自动矢量化

c++ - reinterpret_cast 使 constexpr 函数失败

c++ - 重新排序可变参数

opengl - WGL:没有双缓冲 + 多重采样 = 失败?

multithreading - 多线程中的 OpenGL VBO