blu*_*uth 32 c c++ opengl opengl-3
我对使用以下方法生成/创建顶点数组对象(VAO)的观点感到困惑:
glGenVertexArrays(GLsizei n, GLuint *arrays);
Run Code Online (Sandbox Code Playgroud)
和
glBindVertexArray(GLuint);
Run Code Online (Sandbox Code Playgroud)
因为我仍然可以创建一个缓冲区对象,说了顶点,并描述了该缓冲区对象glVertexAttribPointer,并glEnableVertexAttribArray没有创造过一个VAO.
我的问题是,如果您不必实际创建VAO来描述缓冲区对象中的数据,那么为什么OpenGL SuperBible 5ed这样的源包含在创建VBO时创建VAO的调用?它们仅用于我尚未发现的更高级的主题,我完全糊涂了吗?
此外,我在VBO上阅读wikipedias条目时首次遇到这个问题,他们的示例代码不包含任何调用,glGenVertexArrays()但他们仍然用数据描述数据glVertexAttribPointer().Wiki VBO条目 -
出于什么原因创建VAO的示例?
Bah*_*bar 21
性能改进.
在许多情况下,在主机上设置属性需要大量的API调用,并且在实现中需要进行大量的验证.
完成所有这些操作,并使用VAO允许该工作摊销.
例如,参见Graham Sellers 对实际数据的分析.
Ork*_*rka 16
假设您正在构建一个需要三个VBO的对象(不同的数据用于着色,可能是位置,法线和一些花式效果参数).每次绘制此对象时,都必须绑定所有这些VBO并设置任何其他参数.如果使用VAO,则只需使用一次调用(绑定顶点数组),这将为特定对象设置整个环境.