代码的核心(显示红色矩形):
//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输出红色)
答案 0 :(得分:7)
让我们来看看OpenGL-3核心规范:
第2.10节
第一段:
要使用的缓冲区对象 通过GL的顶点阶段 收集在一起形成一个顶点 数组对象。所有国家都与此有关 顶点使用的数据的定义 处理器封装在一个顶点中 数组对象。
最后一段:
无效操作错误是 如果有任何*指针生成 命令指定位置和 顶点数组数据的组织是 当零被绑定时调用 ARRAY BUFFER缓冲区对象绑定 point,指针参数是 不是NULL³。
在³脚注中:
此错误导致无法创建包含客户端数组指针的顶点数组对象, 同时仍允许缓冲对象解除绑定。
或换句话说:在OpenGL-3核心中,您必须使用VAO