Hi,
I’m just learning OpenGL and try to draw multiple objects and use multiple vertex and index buffers for that. If I use different VAOs it works fine, but with only one I don’t get it working. So is every VAO meant to hold only one buffer of each type or am I doing something wrong?
This works:
//Creating:
GLuint vao[2], vbo[4];
glGenVertexArrays(2, vao);
glGenBuffers(4, vbo);
glBindVertexArray(vao[0]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(bottom), bottom, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(bottomElements), bottomElements, GL_STATIC_DRAW);
glBindVertexArray(vao[1]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[2]);
glBufferData(GL_ARRAY_BUFFER, sizeof(cube), cube, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[3]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(cubeElements), cubeElements, GL_STATIC_DRAW);
//Drawing:
glBindVertexArray(vao[0]);
glDrawElements(GL_TRIANGLES, sizeof(bottomElements)/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
glBindVertexArray(vao[1]);
glDrawElements(GL_TRIANGLES, sizeof(cubeElements)/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
This doesn’t work. It uses both times the buffers I created last:
//Creating:
GLuint vao, vbo[4];
glGenVertexArrays(1, &vao);
glGenBuffers(4, vbo);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(bottom), bottom, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(bottomElements), bottomElements, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, vbo[2]);
glBufferData(GL_ARRAY_BUFFER, sizeof(cube), cube, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[3]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(cubeElements), cubeElements, GL_STATIC_DRAW);
//Drawing:
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[1]);
glDrawElements(GL_TRIANGLES, sizeof(bottomElements)/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ARRAY_BUFFER, vbo[2]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[3]);
glDrawElements(GL_TRIANGLES, sizeof(cubeElements)/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);