新しいモデルが読み込まれるたびにステージ上で VBO、IBO、VAO が作成される iOS で小さなゲームを作成しました。モデルが不要になると、それらのバッファーは解放されます。
バッファの作成と破棄は、常にレンダリング ループの開始時に行われます (ゲーム ループでフレーム スキップを行う 1 つのスレッドがあります)。
以前は VBO と VAO のみを使用していて、以前はクラッシュしたことはありませんでしたが、インデックス バッファー オブジェクト (IBO) を追加すると、突然これらのクラッシュが発生し始めました。
バッファを解放しなければクラッシュしないので、モデルがまだレンダリングされていて、バッファを消去するとクラッシュするのではないでしょうか? しかし、スレッドが 1 つしかない場合はどうすればよいでしょうか。ところで、私はデータを消去しません。すべての頂点とインデックスは静的です。
これは、特定のモデルの参照が残っていないときに呼び出されるバッファーを解放するコードです。
void ResourceModel::DeleteBuffers(uint16_t modelId)
{
glDeleteBuffers(1, &m_buffer[modelId]);
glDeleteBuffers(1, &m_bufferIBO[modelId]);
glDeleteVertexArraysOES(1, &m_geomVAOs[modelId]);
glDeleteVertexArraysOES(1, &m_primVAOs[modelId]);
}