ネイティブの blackberry 10 アプリケーションで VBO を使用して正方形を描画しようとしています。私の実装は、
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();
ここで、 tileCoordList には正方形の座標が含まれ、 tileTextureCoordList には対応するテクスチャが含まれます。型構造ですtileCoordList
。Square3D
typedef struct
{
Vertex3D lowerLeft;
Vertex3D lowerRight;
Vertex3D upperLeft;
Vertex3D upperRight;
}Square3D;
typedef struct
{
GLfloat x;
GLfloat y;
GLfloat z;
} Vertex3D;
4Vertex3D
は tileCoordList の正方形を表します。についても同様ですtileTextureCoordList
。VBOなしでも綺麗に描けます。私はopengl-es 1.1を使用しています
別の質問です。
2 つの VBO を作成するとします。最初のものをそのIDでバインドし、データをコピーして描画したとします。それから 2 つ目もバインドし、データをコピーして描画します。最初のものをもう一度描きたい場合は、もう一度バインドする必要がありますか? 再度バインドする必要がある場合、データをその VBO のバッファに再度コピーする必要がありますか?