VBO não desenha nada
Eu estou tentando desenhar um quadrado com o VBO no meu aplicativo nativo do BlackBerry 10. Minha implementação é,
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();
Aqui tileCoordList contém as coordenadas para o quadrado e tileTextureCoordList contém a textura correspondente.tileCoordList
é umSquare3D
estrutura de tipos.
typedef struct
{
Vertex3D lowerLeft;
Vertex3D lowerRight;
Vertex3D upperLeft;
Vertex3D upperRight;
}Square3D;
typedef struct
{
GLfloat x;
GLfloat y;
GLfloat z;
} Vertex3D;
4 Vertex3D
representa um quadrado em tileCoordList. O mesmo vale paratileTextureCoordList
. Eu posso desenhar bem sem o VBO embora. Eu estou usando o opengl-es 1.1
Outra pergunta.
Se eu criar dois VBOs. Suponha que eu liguei o primeiro com o seu id e copiei os dados e os desenhei. E depois vem o segundo e eu também o vinculo e copio os dados e desenho. Agora, se eu quiser desenhar o primeiro novamente, preciso vinculá-lo novamente? Se eu precisar ligar novamente, eu preciso copiar os dados para o buffer para esse VBO novamente também?