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
C++ OpenGL有可能同时激活两个VAO吗?_C++_Opengl_Vbo_Vao - Fatal编程技术网

C++ OpenGL有可能同时激活两个VAO吗?

C++ OpenGL有可能同时激活两个VAO吗?,c++,opengl,vbo,vao,C++,Opengl,Vbo,Vao,所以我最近学习了VAO(顶点数组对象),到目前为止它们看起来非常棒,但我有一个问题似乎无法解决。我有一组模型,它们的顶点状态存储在单独的VAO中,所以只需调用 glBindVertexArray(VAO); 这就是开始绘制此实例所需的全部内容。问题在于我必须绑定一个额外的VAO,其中包含 glDrawElementsInstanced(); 打电话。因此,它包含偏移量、UV偏移量、颜色覆盖等数据。当我绑定它时,前一个似乎会自动解除绑定,我想这在OpenGL中是有意义的,但我不

所以我最近学习了VAO(顶点数组对象),到目前为止它们看起来非常棒,但我有一个问题似乎无法解决。我有一组模型,它们的顶点状态存储在单独的VAO中,所以只需调用

    glBindVertexArray(VAO);
这就是开始绘制此实例所需的全部内容。问题在于我必须绑定一个额外的VAO,其中包含

    glDrawElementsInstanced();
打电话。因此,它包含偏移量、UV偏移量、颜色覆盖等数据。当我绑定它时,前一个似乎会自动解除绑定,我想这在OpenGL中是有意义的,但我不确定如何使这两个都处于活动状态

其思想是绘制共享同一模型的所有静态对象,而不上传每帧的任何数据。这完全是错误的做法吗

当我绑定它时,前一个似乎会自动解除绑定,我想这在OpenGL中是有意义的,但我不确定如何使这两个都处于活动状态

当然是解开了。这就是OpenGL的工作原理。它是一个状态机,您希望同时激活两个状态

其思想是绘制共享同一模型的所有静态对象,而不上传每帧的任何数据

如果它们没有改变,那么就不要改变它们。您只需绑定并激活顶点组件(如上所述)

当我绑定它时,前一个似乎会自动解除绑定,我想这在OpenGL中是有意义的,但我不确定如何使这两个都处于活动状态

当然是解开了。这就是OpenGL的工作原理。它是一个状态机,您希望同时激活两个状态

其思想是绘制共享同一模型的所有静态对象,而不上传每帧的任何数据

如果它们没有改变,那么就不要改变它们。您只需绑定并激活顶点组件(如上所述)

当我绑定它时,前一个似乎会自动解除绑定,我想这在OpenGL中是有意义的,但我不确定如何使这两个都处于活动状态

当然是解开了。这就是OpenGL的工作原理。它是一个状态机,您希望同时激活两个状态

其思想是绘制共享同一模型的所有静态对象,而不上传每帧的任何数据

如果它们没有改变,那么就不要改变它们。您只需绑定并激活顶点组件(如上所述)

当我绑定它时,前一个似乎会自动解除绑定,我想这在OpenGL中是有意义的,但我不确定如何使这两个都处于活动状态

当然是解开了。这就是OpenGL的工作原理。它是一个状态机,您希望同时激活两个状态

其思想是绘制共享同一模型的所有静态对象,而不上传每帧的任何数据



如果它们没有改变,那么就不要改变它们。您只需绑定并激活顶点组件(如所述)。

这似乎对我帮助不大,我知道OpenGL是一个状态机,所以我要问的是如何组合两个VAO的状态,需要更好的词。因此,第一个VAO包含顶点的所有状态,而第二个VAO包含实例数据的所有状态。我需要一个状态的组合,现在当我绑定所有的VBO而不是使用VAO时,它就工作了。这是一个非常糟糕的设计。VAO只不过是国家容器。。。如果您想使用两个具有不同索引缓冲区的VAO,那么请继续这样做。但不要使一个VAO依赖于另一个VAO的状态。为此,在OpenGL 3.2 core中,始终必须至少使用一个VAO,因为VAO是绑定VBO的上下文。如果没有处于活动状态,则整个GL命令集将没有有效的上下文。VAO使事情变得复杂的一个方面是内存管理,如果删除由非活动VAO绑定的VBO,内存不会立即释放。因此,在某些情况下,您会在没有VAO的情况下使用VBO?@JacobKofoed:在兼容配置文件中,您可以这样做。在OpenGL 3.2 core+中,必须有VAO绑定才能使用VBO。但是,如果你是这样问的话,你可以让不受VAO约束的VBO自由流动?同样,您可以使用不附加VBO的VAO。这正是当您使用VBO进行绘图调用、顶点指针等时。。。它必须是在VAO的上下文中。@AndonM.Coleman如果您尝试在没有VBO的情况下使用VAO进行渲染,会发生什么?这似乎对我帮助不大,我知道OpenGL是一个状态机,所以我要问的是如何组合两个VAO的状态,需要更好的词。因此,第一个VAO包含顶点的所有状态,而第二个VAO包含实例数据的所有状态。我需要一个状态的组合,现在当我绑定所有的VBO而不是使用VAO时,它就工作了。这是一个非常糟糕的设计。VAO只不过是国家容器。。。如果您想使用两个具有不同索引缓冲区的VAO,那么请继续这样做。但不要使一个VAO依赖于另一个VAO的状态。为此,在OpenGL 3.2 core中,始终必须至少使用一个VAO,因为VAO是绑定VBO的上下文。如果没有处于活动状态,则整个GL命令集将没有有效的上下文。VAO使事情变得复杂的一个方面是内存管理,如果删除由非活动VAO绑定的VBO,内存不会立即释放。因此,在某些情况下,您会在没有VAO的情况下使用VBO?@JacobKofoed:在兼容配置文件中,您可以这样做。在OpenGL 3.2 core+中,必须有VAO绑定才能使用VBO。但是,如果你是这样问的话,你可以让不受VAO约束的VBO自由流动?同样,您可以使用不附加VBO的VAO。这正是当您使用VBO进行绘图调用、顶点指针等时。。。它必须在VAO.@AndonM.Coleman的上下文中。如果您尝试使用VA进行渲染,会发生什么