При изучении opengl возникает путаница: нужно ли связывать буферы, такие как VAO или идентификаторы текстуры, несколько раз, не снимая их?
Со ссылкой на вышеуказанную ссылку и полный исходный код я натолкнулся на 2 сценария ios, немного отличающихся друг от друга.
Сначала , автор создает VAO (вне maindraw l oop) и связывает VAO, используя glBindVertexArray(VAO)
, затем он не отменяет привязку используя glBindVertexArray(0);
, но он снова связывает его в ландыш oop. Мое замешательство, Это действительно необходимо? Разве в настоящее время связанный ВАО уже ... связан? Зачем связывать его, когда это уже активный VAO?
И,
Секунда , автор создает идентификатор текстуры, используя:
glGenTextures(1, &texture1);
glBindTexture(GL_TEXTURE_2D, texture1);
//some more code
glGenTextures(1, &texture2);
glBindTexture(GL_TEXTURE_2D, texture2);
вне основного розыгрыша l oop, но делает это снова * внутри основного розыгрыша l oop: *
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
Две вещи, которые я не понимаю в что он делает:
- Почему он снова связывает идентификатор текстуры в mainl oop, когда он сделал это вне mainl oop? (Этот похож на VAO, но я пока не знаю, возможно ли здесь отключение привязки)
- Почему он выбирает активную текстурную единицу (используя
glActiveTexture
) внутри l oop? Разве это не может быть сделано вне основного розыгрыша l oop?