我在iPad上使用OpenGL中的顶点缓冲区时遇到了休眠的情况:-以30fps渲染一些对象-删除对象并创建新对象(杀死所有实体并生成其他实体)-渲染新对象
FPS会下降到10,持续几秒钟,然后慢慢恢复到30。我使用了一些计时器,我看到渲染时间在几秒钟内从30ms增加到100ms。仅当加载新对象(一帧)且发送到渲染时间恒定时,更新时间才会增加。我认为问题出在顶点缓冲区缓存上。有没有一种方法可以强制缓存而不是等待OpenGL这样做?你对这个问题还有其他的看法吗?
发布于 2010-06-29 09:44:46
另一种可能的选择是不销毁对象并重新创建它们,而是使用glBufferSubData()
更新其中的数据。
这可能仍然不能解决缓存问题,因为您仍然将新数据放入缓冲区,但我认为这肯定比销毁和重新创建缓冲区更快。
完成此更改后,您可以尝试的另一件事是尝试使用glBufferData()
的usage
参数,并将其更改为GL_DYNAMIC_DRAW
或GL_STREAM_DRAW
。这些都应该给OpenGL一个提示,缓冲区正在频繁地改变,也许这将促使它适当地优化缓存。
https://stackoverflow.com/questions/3139433
复制相似问题