Mein Problem wirklich einfach zu sein scheint, aber ich kann einfach nicht den Grund dahinter bekommen:OpenGL ES: glBufferSubData füllt Maschen in VBO/IBO, dann glDrawElements macht nur die erste Masche statt alle von ihnen
- Ich habe einen Vertex und einen Index-Puffer, die mit glBufferSubData ausgefüllt werden. Es gibt ein paar Maschen, die in einer Eins-zu-eins in diesem großen VBO und seine entsprechenden IBO
- Dann füllte werde ich versuchen, diese kleinen Maschen mit glDrawElements one-by-one
Problem ist zu machen, nur das erste Netz wird - und mehrfach - an Stellen gerendert, an denen jedes dieser verschiedenen Netze sein sollte !!!
Folgende Informationen können nützlich sein:
Ich schaffe VBO auf diese Weise
gl.glGenBuffers(1, buffers_, 0);
gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, buffers_[0]);
gl.glBufferData(GL11.GL_ARRAY_BUFFER, sizeInBytes, null, GL11.GL_DYNAMIC_DRAW);
Dann wird jede Masche in die VBO wie diese gefüllt ist
gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, name);
gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, startOffsetInBytes, numBytesToCopy, nioBuffer);
Und Maschen sind in diesem fasion gemacht
- binden VBO/IBO und stellen entsprechende Client heißt
- dann gesetzt Vertex, normal und texcoord "Zeiger" - sie zu Beginn des VBO und deren Versatz in Vertex "Struktur"
- und rufen
gl.glDrawElements(GL10.GL_TRIANGLES, indicesNum, GL10.GL_UNSIGNED_SHORT, startIndexOffsetInBytes);
- dann zeigen schließlich unbind VBO/IBO und deaktivieren Sie den Client heißt
ich den Code auf Fehler und ich bin sicher, dass sizeInBytes
, startOffsetInBytes
, numBytesToCopy
und startIndexOffsetInBytes
richtigen Werte (in Bytes :))) sind und indicesNum
ist die Anzahl der Indizes/Scheitelpunkte im Netz (zum Rendern).
Ein verdächtiger Ort ist Vertex/normal/Texcoord Zeiger setzen - sie werden nur einmal gesetzt - und auf den Anfang des VBO gesetzt. Vielleicht muss ich sie jedes Mal vor dem Aufruf von glDrawElements einstellen?
Ich hatte ein ähnliches Problem, aber meine Entschlossenheit war anders, ich musste sicherstellen, den Offset in den VAOs mit glVertexAttribPointer hinzuzufügen. Andernfalls würde nur das erste Netz hinzugefügt werden. Ihre Antwort gab mir einen Hinweis darauf, was es sein könnte, also danke ich dir dafür allein :) – dcousens