Ich habe ein Problem mit dem Rendern mehrerer Objekte aus einem Vertex-Puffer. Ich habe eine VBO, die alle Vertices und mehrere IBOs enthält. Meine Idee war es, n VAOs für n UUs zu erstellen und für jeden dieser VAOs den VBO und einen der IBOs zu binden. Ich weiß nicht, wie ich das beheben kann.Single VBO und mehrere IBOs
// all indices
std::vector<std::vector<unsigned int>> allIndices;
// gen buffers for ibos
glGenBuffers(allIndices.size(),ibos);
// gen vaos
glGenVertexArray(allIndices.size(),vaos);
// vbo for vertices
glGenBuffers(1,&vbo);
glBindBuffer(GL_ARRAY_BUFFER,vbo);
glBufferData(GL_ARRAY_BUFFER,...);
// bind VAOn + IBOn + VBO
for(unsigned int x = 0; x < allIndices.size(); x++) {
glBindVertexArray(vao[x]);
// bind current ibo
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibo[x]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,...);
//
glBindBuffer(GL_ARRAY_BUFFER,vbo);
// how to bind this buffer to the vao without uploading the data once more?
glBindVertexArray(0);
}
Meine zweite Idee war, alle Indizes concatinate und sie mit glDrawRangeElements nennen()
Verwenden Sie corect-Tags. Dies ist nicht C. – Olaf
"* Wie binden Sie diesen Puffer an den vao, ohne die Daten noch einmal hochzuladen? *" Sie haben diesen Puffer niemals an den VAO angehängt. Das Hochladen von Daten in einen Puffer hat * nichts * damit zu tun, diesen Puffer für Vertex-Daten zu verwenden (außer dass Sie Vertex-Daten an ihn übergeben würden). –