今気になっているアプリは3Dモデルビューアです。ユーザーは非常にまれに大きな新しいメッシュをロードしてレンダリングすることがあり、古いメッシュは破棄する必要があります (破棄する必要があります)。
このため、GL_STATIC_DRAW
明らかに VBO の正しいヒントです。
この時点で少し確信が持てないのはglDeleteBuffers()
、VBO と IBO に対して、またglDeleteVertexArrays[OES]()
VAO に対しても行うのか、それとも何も行わずにglBufferData()
新しくロードしたメッシュで VBO と IBO のみを実行するのか、何も削除して再生成したり、再生成したりする必要がないことです。 -VAOglVertexAttribPointer
状態を定義します。(サブ質問: VBO のみを削除して再生成し、VAO はそのままにしておく場合、スキップできglVertexAttribPointer()
ますか?)
を呼び出すと OpenGL が VBO 内の以前のデータを実際に破棄する場合glBufferData()
、これは完璧です。私が読んだ限りでglBufferData()
は、VBO を再割り当てすることになっています。
しかし、実際に私が探しているのは、このタマネギのさまざまなレイヤーまで再ロードすることと、頂点を変更することだけが必要な場合にどこまで行く必要があるかについての具体的な説明です。アプリケーション内のインデックス バッファー コンテンツ (生のジオメトリ)、または VBO をまったく再生成または削除する必要があると考えられる状況が存在する場合。同じ VBO が異なる VAO のセット間で便利に共有される可能性があることがわかります。また、二度と使用しない VAO がいくつかあるため、割り当てを解除する状況を想像できますが、VBO のように見えます。内部に含まれるデータを再割り当てするための API が存在する場合は、引き続きリサイクルできます。
そこにあるすべてのチュートリアルと説明は、セットアップを支援することだけを扱っていることがわかりましたが、その段階を理解した今、これらの詳細の残りを正しくする方法があまり明確ではありません.