到目前为止,我知道立即,显示列表,顶点缓冲区和顶点缓冲区对象渲染。哪个是最快的?哪个OpenGL版本都需要?我该怎么用?
答案 0 :(得分:5)
现在渲染的最佳(并且几乎只有)方法是使用通用缓冲区,即AKA顶点缓冲区对象。它们是2.1的核心,如果我是正确的,但通常在 1.5 (作为ARB_vertex_buffer_object
)中作为扩展出现。它们具有硬件支持,这意味着它们可以并且可能直接存储在GPU内存中。
向其加载数据时,请指定建议的用法。您可以在glBufferData手册中阅读更多相关信息。例如,GL_STATIC_DRAW
与静态显示列表非常相似。这使您的图形卡可以优化对它们的访问。
答案 1 :(得分:3)
现代(阅读:非古代)硬件真的不喜欢立即模式。通过用顶点数组替换立即模式,我已经看到了近2个数量级的性能提升。
OpenGL 3及更高版本仅支持缓冲区对象,不推荐使用所有其他渲染模式。
正确使用显示列表是一件非常痛苦的事情,在非古代硬件上不值得。
总结一下:如果使用OpenGL 3+,则必须使用(V)BO。如果您以OpenGL 2为目标,请根据需要使用顶点数组或VBO。
答案 2 :(得分:1)
另外,请不要忘记Vertex Array Objects以获得最佳效果。检查this great tutorial Nicol Bolas,然后解释它们。