【问题标题】:OpenGL Rendering ModesOpenGL 渲染模式
【发布时间】:2013-01-17 19:47:54
【问题描述】:

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

【问题讨论】:

  • "顶点缓冲区和顶点缓冲区对象渲染" 这两者是一回事。此外,这个问题无法回答;答案将是特定于硬件、特定于驱动程序版本和特定于工作负载

标签: opengl


【解决方案1】:

现在最好的(也是唯一的)渲染方法是使用通用缓冲区,也就是顶点缓冲区对象。如果我没记错的话,它们是 2.1 的核心,但通常在 1.5 中作为扩展出现(如 ARB_vertex_buffer_object)。它们有硬件支持,这意味着它们可以并且可能会直接存储在 GPU 内存中。

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】: