【问题标题】:Do I have to use glGenVertexArray in opengl我是否必须在 opengl 中使用 glGenVertexArrays
【发布时间】:2014-12-05 08:46:29
【问题描述】:
GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

从上面的代码可以看出,有些教程在使用opengl之前就使用了这个。但是我正在关注的教程直接使用glGenBuffers 方法并且效果很好。因此,我完全混淆了glGenVertexArrays。遗憾的是它定义了缓冲区的使用方式,但没有人说以何种方式使用。你能帮我理解吗?

【问题讨论】:

    标签: opengl vertex-array


    【解决方案1】:

    这取决于 OpenGL 版本。从具有 VAO 的 OpenGL-3 core 配置文件开始是强制性的。为了与旧代码保持兼容,大多数开发人员只需在开始时添加您在其中找到的 sn-p 以设置 VAO 以捕获所有 VBO 状态。

    【讨论】:

      【解决方案2】:

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

      在旧版本的 GL 中,glVertexAttribPointer (...) 之类的东西是全局状态。然而,从 GL3 开始,它们与 VAO 绑定在一起。

      兼容性 配置文件仍然允许您将顶点数组状态视为全局状态,但 3.1(没有 GL_ARB_compatibility 伪扩展)和 3.2+ 核心 配置文件需要您每当您拨打glVertexAttribPointer (...) 或glDrawArrays (...) 之类的电话时,创建并绑定非零VAO。否则,您会遇到 GL_INVALID_OPERATION 错误。

      【讨论】:

        【解决方案3】:

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

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

        在one of my other answer 中,我提供了存储在每个 VAO 中的一部分状态。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多