VBO zeichnet nichts
Ich versuche mit VBO in meiner Blackberry 10-Anwendung ein Quadrat zu zeichnen. Meine Implementierung ist,
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glGenBuffers(1,&decompressTileImage->VBOId);
glBindBuffer(GL_ARRAY_BUFFER,decompressTileImage->VBOId);
glBufferData(GL_ARRAY_BUFFER,sizeof(tileCoordList)+sizeof(tileTextureCoordList),0,GL_STATIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER,0,sizeof(tileCoordList),tileCoordList);
glBufferSubData(GL_ARRAY_BUFFER,sizeof(tileCoordList),sizeof(tileTextureCoordList),tileTextureCoordList);
glTexCoordPointer(3, GL_FLOAT, sizeof(tileTextureCoordList), (void*)sizeof(this->tileCoordList));
glVertexPointer(3, GL_FLOAT, sizeof(tileCoordList), 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_BLEND);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
swapBuffers();
Hier enthält tileCoordList die Koordinaten für das Quadrat und tileTextureCoordList die entsprechende Textur.tileCoordList
ist einSquare3D
Typ Struktur.
typedef struct
{
Vertex3D lowerLeft;
Vertex3D lowerRight;
Vertex3D upperLeft;
Vertex3D upperRight;
}Square3D;
typedef struct
{
GLfloat x;
GLfloat y;
GLfloat z;
} Vertex3D;
4 Vertex3D
repräsentiert ein Quadrat in tileCoordList. Gleiches gilt fürtileTextureCoordList
. Ich kann aber ohne VBO gut zeichnen. Ich benutze opengl-es 1.1
Eine andere Frage.
Wenn ich zwei VBOs erstelle. Angenommen, ich habe die erste mit ihrer ID verknüpft, die Daten kopiert und gezeichnet. Und dann kommt der zweite und ich binde ihn auch und kopiere die Daten und zeichne sie. Wenn ich jetzt den ersten erneut zeichnen möchte, muss ich ihn dann erneut binden? Wenn ich erneut binden muss, muss ich dann auch die Daten für diesen VBO erneut in den Puffer kopieren?