我在iPad上的OpenGL中使用顶点缓冲区的情况很简单: - 使用30 FPS渲染一些对象 - 删除对象并创建新对象(杀死所有实体并生成其他实体) - 渲染新对象
FPS下降到10几秒钟然后慢慢恢复到30.我使用了一些计时器,我看到渲染时间从30ms增加到100ms几秒钟。只有在加载新对象(一帧)和发送到渲染时间不变时,更新时间才会增加。我认为问题在于顶点缓冲区缓存。有没有办法强制缓存而不是等待OpenGL这样做?你对这个问题有其他意见吗?
答案 0 :(得分:2)
另一种可能的选择是不破坏对象并重新创建它们,而是使用glBufferSubData()
更新它们中的数据。
这可能仍然无法解决缓存问题,因为您仍在将新数据放入缓冲区,但我认为它比破坏和重新创建缓冲区更快。
如果发生这种变化,您可以尝试的其他方法是使用usage
glBufferData()
参数,并将其更改为GL_DYNAMIC_DRAW
或GL_STREAM_DRAW
。这些应该给OpenGL一个暗示缓冲区经常变化的提示,也许这将推动它适当地优化缓存。