OpenGL VAO最佳做法

我面临一个问题,我相信是VAO依赖,但我不知道。

我不知道VAO的正确用法,我在GL初始化时使用的是一个简单的

glGenVertexArrays(1,&vao)

其次是a

glBindVertexArray(vao)

后来,在我的绘图管道中,我只是调用glBindBuffer(),glVertexAttribPointer(),glEnableVertexAttribArray()等等。无需关心初始绑定VAO

这是一个正确的做法吗?

VAO在VBO和纹理方面的作用与它们如何绑定相似。在程序的整个长度上使用单个VAO将不会产生性能优势,因为您可能完全不需要渲染VAO。事实上,它可能会更慢,这取决于实现截取顶点属性设置,因为他们正在绘制。

VAO的要点是在初始化期间运行所有必要的方法来绘制对象,并在主循环期间切除所有额外的方法调用开销。重点是有多个VAO并在绘制时在它们之间切换。

在最佳做法方面,您应该如何组织代码:

initialization:
    for each batch
        generate, store, and bind a VAO
        bind all the buffers needed for a draw call
        unbind the VAO

main loop/whenever you render:
    for each batch
        bind VAO
        glDrawArrays(...); or glDrawElements(...); etc.
    unbind VAO

这避免了绑定/解除绑定缓冲区和传递每个顶点属性的所有设置的混乱,并用一个方法调用,绑定VAO替换它。

http://stackoverflow.com/questions/8923174/opengl-vao-best-practices

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:OpenGL VAO最佳做法