Использование glBindVertexArray в цикле обновления в коде DSA или нет - PullRequest
0 голосов
/ 09 января 2019

Я занимаюсь преобразованием некоторого кода 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

1 Ответ

0 голосов
/ 11 января 2019

Чтобы подвести итог, совершенно правильно написать цикл обновления, как в примере, показанном в вопросе. VAO должен быть связан, когда он используется в цикле обновления. Но когда вы используете DSA, вам не нужно связывать VAO (ни VBO, ни индексный буфер) при их изменении. Поэтому нет альтернативы glDrawElements, которая бы принимала идентификатор VAO в качестве параметра, например, например. glVertexArrayElementBuffer делает.

...