5

到目前为止,我了解即时、显示列表、顶点缓冲区和顶点缓冲区对象渲染。哪个最快?每个都需要哪个 OpenGL 版本?我应该使用什么?

4

2 回答 2

5

现在最好的(也是几乎唯一的)渲染方法是使用通用缓冲区,AKA Vertex Buffer Objects。如果我是正确的,它们是 2.1 的核心,但通常作为1.5的扩展出现(如ARB_vertex_buffer_object)。它们有硬件支持,这意味着它们可以并且可能会直接存储在 GPU 内存中。

当您向它们加载数据时,您指定了建议的用法。您可以在glBufferData手册中了解更多信息。例如,GL_STATIC_DRAW是非常类似于静态显示列表的东西。这使您的显卡可以优化对它们的访问。

于 2013-01-17T11:05:18.527 回答
3

现代(阅读:非古代)硬件真的不喜欢立即模式。通过用顶点数组替换立即模式,我已经看到了将近 2 个数量级的性能改进。

OpenGL 3 及更高版本仅支持缓冲区对象,所有其他渲染模式均已弃用。

正确使用显示列表是一件很痛苦的事情,在非古代硬件上不值得。

总结一下:如果你使用 OpenGL 3+,你必须使用 (V)BOs。如果您以 OpenGL 2 为目标,请酌情使用顶点数组或 VBO。

于 2013-01-17T11:03:25.290 回答