不同的 VAO 可以使用以前使用的顶点属性索引号吗
Can a different VAO use the previous used vertex attribute index number
两个 VAO (va01, vao2)
可以具有相同的顶点属性索引号吗?
GLuint vao1, vao2;
glGenVertexArrays(1, &vao1);
glGenVertexArrays(1, &vao2);
{
glBindVertexArray(vao1);
...
glBindBuffer(GL_ARRAY_BUFFER, vbo1);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
...
glBindVertexArray(0);
}
{
glBindVertexArray(vao2);
...
glBindBuffer(GL_ARRAY_BUFFER, vbo2);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
...
glBindVertexArray(0);
}
假设 vbo1
和 vbo2
是在这些代码之前定义的,并且它们已经 glBufferData
了。 vao1
和 vao2
可以有相同的顶点属性索引号 0 吗?
是的,多个VAO可以设置相同的顶点属性,分别指向不同的VBO。
Suppose vbo1 and vbo2are defined before these code and they got glBufferDataalready. Can vao1 and vao2 both have the same vertex attribute index number 0?
你在这里混淆了一些东西。 VAO 从不关心 BufferData
。 VAO 存储属性指针、属性使能和 GL_ELEMENT_ARRAY_BUFFER_BINDING
。他们不存储任何顶点数据,他们只引用它。他们确实按名称引用了一个 VBO——这意味着你可以这样做:
glBindBuffer(GL_ARRAY_BUFFER, vbo1);
glVertexAttribPointer(i, ...); // here, a reference to vbo1 gets part of the attrib pointer for attrib i
...
glBindBuffer(GL_ARRAY_BUFFER, vbo1);
glBufferData(...); // VAO will now point into this buffer storage
(这也意味着您可以在为VBO创建缓冲存储之前设置指针,您只需要创建VBO对象即可)。也许你觉得我在 中的插图很有帮助。
两个 VAO (va01, vao2)
可以具有相同的顶点属性索引号吗?
GLuint vao1, vao2;
glGenVertexArrays(1, &vao1);
glGenVertexArrays(1, &vao2);
{
glBindVertexArray(vao1);
...
glBindBuffer(GL_ARRAY_BUFFER, vbo1);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
...
glBindVertexArray(0);
}
{
glBindVertexArray(vao2);
...
glBindBuffer(GL_ARRAY_BUFFER, vbo2);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
...
glBindVertexArray(0);
}
假设 vbo1
和 vbo2
是在这些代码之前定义的,并且它们已经 glBufferData
了。 vao1
和 vao2
可以有相同的顶点属性索引号 0 吗?
是的,多个VAO可以设置相同的顶点属性,分别指向不同的VBO。
Suppose vbo1 and vbo2are defined before these code and they got glBufferDataalready. Can vao1 and vao2 both have the same vertex attribute index number 0?
你在这里混淆了一些东西。 VAO 从不关心 BufferData
。 VAO 存储属性指针、属性使能和 GL_ELEMENT_ARRAY_BUFFER_BINDING
。他们不存储任何顶点数据,他们只引用它。他们确实按名称引用了一个 VBO——这意味着你可以这样做:
glBindBuffer(GL_ARRAY_BUFFER, vbo1);
glVertexAttribPointer(i, ...); // here, a reference to vbo1 gets part of the attrib pointer for attrib i
...
glBindBuffer(GL_ARRAY_BUFFER, vbo1);
glBufferData(...); // VAO will now point into this buffer storage
(这也意味着您可以在为VBO创建缓冲存储之前设置指针,您只需要创建VBO对象即可)。也许你觉得我在