シーンをレンダリングするために、VBO で glDrawElements 呼び出しを使用しています。シーンは、頂点とテクスチャ座標を持つ布です。この例では、旗をレンダリングしています。
私のシーンでは、頂点は動的です。つまり、フレームごとに VBO に書き込む必要があります。私の処理の多くは CUDA を使用して GPU で行われるため、常に CPU メモリを GPU メモリにマッピングしています。一方、テクスチャ座標は静的です。glDrawElements でレンダリングするには (私が理解しているように)、頂点 VBO でテクスチャ座標をインターリーブしてから、glTexCoordPointer() と glEnableClientState() を呼び出すだけです。CPU <--> GPU メモリ マッピングを行うときに、すべてのテクスチャ座標を一緒に描画する必要があるため、これは最適ではありません。
vbo のテクスチャ データに触れずに vbo の頂点データを更新できるように vbo を配置する方法はありますか? 以下は、レンダリング用のコードです。現在、インデックス配列、頂点配列、テクスチャ配列の 3 つの配列が埋められています。
以下のコードでは、indexVbo がインデックス配列にマップされ、vbo が頂点配列にマップされています。ここで、テクスチャを組み込む必要があります。洞察や提案をいただければ幸いです。
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, flagTexId);
glPushMatrix();
glColor3f(1.0, 1.0, 1.0);
glVertexPointer(4, GL_FLOAT, 0, 0);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVbo);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
// Render flag mesh
glDrawElements(GL_TRIANGLES, numTriangles * 3, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glPopMatrix();
glDisable(GL_TEXTURE_2D);