是否在 DSA 代码的更新循环中使用 glBindVertexArray
Using glBindVertexArray in update loop in DSA code or not
我正在将一些 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
总而言之,按照问题中显示的示例编写更新循环是完全正确的。 VAO 在更新循环中使用时应该绑定。但是当你使用 DSA 时,你不需要在修改它们时绑定 VAO(也不是 VBO 或索引缓冲区)。
因此,没有其他选择 glDrawElements
将 VAO id 作为参数,例如glVertexArrayElementBuffer
确实如此。
我正在将一些 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
总而言之,按照问题中显示的示例编写更新循环是完全正确的。 VAO 在更新循环中使用时应该绑定。但是当你使用 DSA 时,你不需要在修改它们时绑定 VAO(也不是 VBO 或索引缓冲区)。
因此,没有其他选择 glDrawElements
将 VAO id 作为参数,例如glVertexArrayElementBuffer
确实如此。