Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GLDrawArray绘制VBO在OpenGL 2.1中工作,但在OpenGL 3.x中不工作_Opengl_Vbo_Opengl 3 - Fatal编程技术网

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

使用GLDrawArray绘制VBO在OpenGL 2.1中工作,但在OpenGL 3.x中不工作,opengl,vbo,opengl-3,Opengl,Vbo,Opengl 3,代码的核心(显示红色矩形): 当我将上下文切换到OpenGL 3.x时,这段代码停止工作(我只能看到背景的颜色),但当我以与上面代码相同的方式初始化VAO,然后绑定VAO并调用glDrawArrays时,它就工作了 有什么问题吗?如何在不使用VAO的情况下绘制VBO (着色器非常简单,而只有多层矩阵和ps输出为红色)让我们看看OpenGL-3-core规范: 第2.10节 第一段: 要使用的缓冲区对象 由GL的顶点阶段确定 聚集在一起形成一个顶点 数组对象。与《公约》有关的所有国家 顶点使用的数

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

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

有什么问题吗?如何在不使用VAO的情况下绘制VBO


(着色器非常简单,而只有多层矩阵和ps输出为红色)

让我们看看OpenGL-3-core规范:

第2.10节

第一段:

要使用的缓冲区对象 由GL的顶点阶段确定 聚集在一起形成一个顶点 数组对象。与《公约》有关的所有国家 顶点使用的数据的定义 处理器封装在一个顶点中 数组对象

最后一段:

出现无效的操作错误 如果任何*指针 指定位置和位置的命令 顶点数组数据的组织是 当零绑定到 数组缓冲区对象绑定 点,指针参数为 不是空的

在脚注中:

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


或者换句话说:在OpenGL-3-core中,您必须使用VAO,我认为VAO是可选的。(我的代码不会抛出任何错误)。那么我应该如何使用VAOs?1个VAO=1个模型?暂时我将使用一个全局VAO。您可以在一个VAO中收集多个模型。我通常收集在VAO中始终聚集在一起的具有类似属性的网格。例如,可以在一个VAO中收集使用相同着色器的游戏引擎地图的所有静态元素。我认为,按着色器和材质属性排序可能是最好的排序标准。
//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