使用glDrawArrays绘制VBO在OpenGL 2.1中工作,但在OpenGL 3.x中不工作

时间:2011-06-20 16:00:21

标签: opengl vbo opengl-3

代码的核心(显示红色矩形):

//bind program, set uniforms, bind vbo
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0,0);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(0);
//unbind vbo, unbind program

当我将上下文切换到OpenGL 3.x时,此代码停止工作(我只能看到背景的颜色),但是当我以与上面代码相​​同的方式初始化VAO然后我绑定VAO并且调用glDrawArrays,然后就可以了。

可能是什么问题?如何在不使用VAO的情况下绘制VBO?

(着色器非常简单,只有mulitplies矩阵和ps输出红色)

1 个答案:

答案 0 :(得分:7)

让我们来看看OpenGL-3核心规范:

第2.10节

第一段:

  

要使用的缓冲区对象   通过GL的顶点阶段   收集在一起形成一个顶点   数组对象。所有国家都与此有关   顶点使用的数据的定义   处理器封装在一个顶点中   数组对象。

最后一段:

  

无效操作错误是   如果有任何*指针生成   命令指定位置和   顶点数组数据的组织是   当零被绑定时调用   ARRAY BUFFER缓冲区对象绑定   point,指针参数是   不是NULL³。

在³脚注中:

  

此错误导致无法创建包含客户端数组指针的顶点数组对象,   同时仍允许缓冲对象解除绑定。

或换句话说:在OpenGL-3核心中,您必须使用VAO