У меня есть метод для инициализации моего VBO / VAO:
glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);// setup VAO
glBindVertexArray(mVAO);
glBindBuffer(GL_ARRAY_BUFFER, mVBO_VertexShader);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
А потом отдельный метод для рисования;
glBindVertexArray(mVAO);
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_SHORT, &mIndexBuffer);
glBindVertexArray(0);
Нужно ли отстегивать GL_ELEMENT_ARRAY_BUFFER
после моего звонка glDrawElements
или его состояние «связано» с ВАО? (Так что, если я отвяжу ВАО, GL_ELEMENT_ARRAY_BUFFER
тоже будет несвязанным)?
GL_ELEMENT_ARRAY_BUFFER
привязан к государству ВАО. Я цитирую спецификацию OpenGL 3.3: «Полученный объект массива вершин представляет собой новый вектор состояний, включающий все значения состояний, перечисленные в таблицах 6.4 и 6.5». Таблица 6.4 содержит ELEMENT ARRAY BUFFER BINDING
, Так что нет, вам не нужно это связывать.
Кроме того, вы, вероятно, хотите пройти NULL
в качестве последнего параметра glDrawElements
в вашем примере, так как адрес относительно буфера массива связанных элементов ..
Свяжите свой массив вершин, когда вы установите указатель атрибута вершины.
Так что в основном просто не отсоединяйте ваш массив вершин, поскольку у вас есть только один.