我在iOS上制作了一个小游戏,只要加载新模型,就会在舞台上创建VBO,IBO和VAO。当不再需要该模型时,将释放这些缓冲区。
缓冲区创建和销毁总是在渲染循环开始时完成(我有一个单独的线程,在游戏循环中跳帧)。
我以前只使用VBO和VAO,之前从未崩溃,但是当我添加索引缓冲区对象IBO时,我突然开始遇到这些崩溃。
如果我没有释放缓冲区,它不会崩溃,所以我猜模型仍在渲染并擦除缓冲区使其崩溃?但是如果我有一个单独的线程怎么可能呢?顺便说一下,我不会删除数据。所有顶点和索引都是静态的。
这是释放缓冲区的代码,当没有特定模型的引用时调用缓冲区:
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]);
}