Opengl 一个着色器中多个VAO的顶点属性绑定

Opengl 一个着色器中多个VAO的顶点属性绑定,opengl,glsl,vertex-shader,Opengl,Glsl,Vertex Shader,假设我有一个具有以下顶点属性的顶点着色器: layout(location = 0) in vec4 foo1; layout(location = 1) in vec4 bar1; layout(location = 2) in vec4 foo2; layout(location = 3) in vec4 bar2; 两个VAO的初始化方式如下: glBindVertexArray(vao1); ... glVertexAttribPointer(0, ...); glVertexAttr

假设我有一个具有以下顶点属性的顶点着色器:

layout(location = 0) in vec4 foo1;
layout(location = 1) in vec4 bar1;
layout(location = 2) in vec4 foo2;
layout(location = 3) in vec4 bar2;
两个VAO的初始化方式如下:

glBindVertexArray(vao1);
...
glVertexAttribPointer(0, ...);
glVertexAttribPointer(1, ...);

glBindVertexArray(vao2);
...
glVertexAttribPointer(2, ...);
glVertexAttribPointer(3, ...);
然后,如果我连续绑定它们:

glBindVertexArray(vao1);
glBindVertexArray(vao2);
glDrawArrays(...);

我将从
foo1
bar1
顶点属性中获得哪些数据?我可以期望它们的值是从vao1指向的缓冲区中获取的,还是它们的状态是未定义的?

OpenGL对象与宏不同(除了显示列表,它们实际上与宏相似)。它们存储状态。当您将一个新对象绑定到与前一个对象相同的目标时,新对象将占用所有受管状态;旧的从该绑定点解除绑定

每个VAO包含所有可用顶点属性的状态。这些属性默认为禁用。因此,如果在VAO中仅启用属性2和3,则当绑定该VAO时,将仅启用属性2和3