2013-05-12 3 views
1
GLuint vao; 
glGenVertexArrays(1, &vao); 
glBindVertexArray(vao); 
glEnableVertexAttribArray(0); 
vbo.bind(GL_ARRAY_BUFFER); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); 
glDisableVertexAttribArray(0); 
ibo.bind(GL_ELEMENT_ARRAY_BUFFER); //where do I put this? 
glBindVertexArray(0); 

while (glfwGetWindowParam(GLFW_OPENED)) { 
    glClear(GL_COLOR_BUFFER_BIT); 
    glBindVertexArray(vao); 
    glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0); 
    glfwSwapBuffers(); 
} 

То, как я понимаю, ВАО, что я создаю Вао ручку и связать его, как этотПонимание ВАО с IBO в

glGenVertexArrays(1, &vao); 
glBindVertexArray(vao); 

Теперь я могу заполнить его в ВАО с этими тремя командами

vbo.bind(GL_ARRAY_BUFFER); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); 
glDisableVertexAttribArray(0); 

Я должен отметить, что я использовал свой собственный класс vbo.

И тогда я закрываю ВАО с

glBindVertexArray(0); 

И тогда я могу просто загрузить его в renderloop

glBindVertexArray(vao); 
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0); 

Но я не получаю никакого вывода.

Теперь я думаю, что это как-то связано с моим индексированным массивом. (ibo) Как использовать VAO с IBO?

ответ

6

VAO обеспечивает привязку указателей массива вершин (включая привязки буфера массива во время вызова указателя), биты включения и текущую привязку GL_ELEMENT_ARRAY_BUFFER (но не текущую привязку GL_ARRAY_BUFFER). Таким образом, IBO связывается с тем, что вы делаете, хорошо в этом конкретном положении.

Однако вы делаете glDisableVertexAttribArray(0);, в то время как VAO все еще привязан, поэтому VAO содержит этот атрибутный массив как отключенный.

Смежные вопросы