提问者:小点点

我必须在opengl中使用glGenVertexArray吗?


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

从上面的代码中可以看到,一些教程在使用opengl之前使用了这个。但是我正在学习的一个教程,直接使用了glGenBuffers方法,而且效果很好。因此,我完全搞不清楚什么是glGenVertexArrays。令人遗憾的是,它定义了缓冲区的使用方式,但没有人说以什么方式使用。你能帮我理解吗?


共3个答案

匿名用户

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

匿名用户

在GL的旧版本中,像< code > glVertexAttribPointer(...)是全局状态。然而,从GL3开始,他们开始与VAOs绑定。

兼容性配置文件仍然允许您将顶点数组状态视为全局状态,但是3.1(没有GL_ARB_compatibility伪扩展)和3.2核心配置文件要求您在进行调用时创建并具有非零VAO绑定,例如glVertex AttribPointer(…)glDrawArray(…)。否则,您最终会出现GL_INVALID_OPERATION错误。

匿名用户

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

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

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