Ich bin dabei, zu versuchen, eine einfache texturierte Quad als VBO zu rendern. Wenn VBOs nicht verwendet werden, funktioniert alles wie erwartet (bei statischen Objekten aktualisiere ich jedoch immer noch meine Eckendaten, was sinnlos erscheint, daher der Wechsel zu VBOs).Android OpenGL ES 2. 0 VBO nicht Rendern
Allerdings muss ich etwas falsch machen, denn ich bekomme nichts, absolut zilch, auf den Bildschirm gerendert.
ist hier der entsprechende Code ich habe:
Konstruktor:
public VBO() {
updateVertexData();
vertexBuf = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
vertexBuf.put(vertices);
vertexBuf.position(0);
//Create buffers array for VBO (I'm using interleaved data so only 1 needed here??
final int buffers[] = new int[1];
GLES20.glGenBuffers(1, buffers, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, buffers[0]);
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vertexBuf.capacity() * 4, vertexBuf, GLES20.GL_STATIC_DRAW);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
mBufferIdx = buffers[0];
vertexBuf.limit(0);
vertexBuf = null;
}
Vertex-Update
public void updateVertexData(){
vertices[0]=-1;
vertices[1]=1f;
vertices[2]=0;
vertices[3]=0;
vertices[4]=0;
vertices[5]=1;
vertices[6]=1f;
vertices[7]=0;
vertices[8]=1;
vertices[9]=0;
vertices[10]=-1;
vertices[11]=-1f;
vertices[12]=0;
vertices[13]=0;
vertices[14]=1;
vertices[15]=1;
vertices[16]=-1f;
vertices[17]=0;
vertices[18]=1;
vertices[19]=1;
}
Rendering
public void drawVBO(){
GLES20.glUseProgram(iProgId);
mMVPMatrixHandle = GLES20.glGetUniformLocation(iProgId, "uMVPMatrix");
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mBufferIdx);
GLES20.glEnableVertexAttribArray(iPosition);
GLES20.glVertexAttribPointer(iPosition, 3, GLES20.GL_FLOAT, false, 5 * 4, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mBufferIdx);
GLES20.glEnableVertexAttribArray(iTexCoords);
GLES20.glVertexAttribPointer(iTexCoords, 2, GLES20.GL_FLOAT, false, 5 * 4, 3);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
}
Wie ich sagen, wenn ich die VBO-Code Streifen und den Code aus updateVertexData zurück in mein Ziehverfahren bewegen, dann arbeitet jeder OK. Würde mich freuen wenn mir jemand erklären könnte was ich hier falsch mache ....
HALLO @RetoKoradi, danke für den Kommentar, ich habe versucht, es nur ohne die * 4, aber es macht keinen Unterschied, ich habe noch nichts gemacht bekommen. Wäre nicht VertexBuf jedoch ein FloatBuffer anstatt eines ByteBuffers, da ich einen 'asFloatBuffer' an das Ende angehängt habe? Vielen Dank. – Zippy
Oh, ok, ich habe übersehen, dass sich die Linie über den sichtbaren Bereich hinaus erstreckte und ich horizontal scrollen musste. –
Keine probs @RetoKoradi, ich denke, ich habe herausgefunden, warum es nicht funktionierte :-) – Zippy