我必须在opengl中使用glGenVertexArray吗?


GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

从上面的代码中可以看出,一些教程在使用 opengl 之前会使用它。但是我正在遵循的教程直接使用glGenBuffers方法并且工作正常。因此,我完全困惑glGenVertexArrays什么.遗憾的是,它定义了如何使用缓冲区,但没有人说以何种方式使用。你能帮我理解吗?

这取决于OpenGL版本。从OpenGL-3核心配置文件开始,必须具有VAO。为了保持与旧代码的兼容性,大多数开发人员只需在开始时找到代码片段,即可使用VAO来捕获所有VBO状态。

顶点数组对象 (VAOs) 是状态容器。

在旧版本的GL中,像glVertexAttribPointer (...)这样的东西是全局状态。然而,从GL3开始,它们与VAO联系在一起。

兼容性配置文件仍允许您将顶点数组状态视为全局状态,但 3.1(不带伪扩展GL_ARB_compatibility)和 3.2+ 核心配置文件要求您在进行调用(如 glVertexAttribPointer (...)glDrawArrays (...))时创建并绑定非零 VAO 。否则,您最终会出现GL_INVALID_OPERATION错误。

从 openGL 3.2+ 开始,除非您使用兼容性配置文件,否则必须使用 VAO。

每个 VAO 存储索引缓冲区 (ELEMENT_ARRAY_BUFFER) 和每个属性绑定。

在我的另一个答案中,我提供了存储在每个VAO中的部分状态。

相关内容

  • 没有找到相关文章

最新更新