我正在将一些opengl代码转换为DSA的过程,并且其编写的所有内容都不绑定顶点数组,因为它是在DSA中继承的。所以我用
GLuint VBO, VAO, indexBuffer;
glCreateVertexArrays(1, &VAO);
glCreateBuffers(1, &indexBuffer);
glCreateBuffers(1, &VBO);
...
而不是glGen ...的对应对象。
但是现在我只是想知道在更新循环中是否有绑定顶点数组的DSA版本。现在我有
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// Draw the triangle
ourShader.Use();
const auto Textureloc = glGetUniformLocation(ourShader.Program, "ourTexture");
glBindTextureUnit(Textureloc, texture);
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 9, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
glBindTextureUnit(0, 0);
glfwSwapBuffers(window);
}
可以正常工作。但是,如果我不将glBindVertexArray
替换为其他内容,我会在以后的编码中遇到一些有趣的问题。就像我将glBindTexture
替换为glBindTextureUnit
答案 0 :(得分:0)
总结起来,按照问题所示的示例编写更新循环是完全正确的。在更新循环中使用VAO时,应将其绑定。但是,当您使用DSA时,您在修改它们时不需要绑定VAO(既不绑定VBO,也不绑定索引缓冲区)。
因此,没有其他选择glDrawElements
将VAO ID作为参数,例如glVertexArrayElementBuffer
可以。