presentRenderbuffer:GL_RENDERBUFFER_OES需要很长时间
问题描述:
我在我的游戏中添加了一个分析器并隔离了此功能。它有时会导致FPS下降。这是我的结果:presentRenderbuffer:GL_RENDERBUFFER_OES需要很长时间
Present buffer time: 22
Present buffer time: 1
Present buffer time: 9
Present buffer time: 1
Present buffer time: 20
Present buffer time: 6
Present buffer time: 4
Present buffer time: 4
Present buffer time: 22
Present buffer time: 4
Present buffer time: 8
Present buffer time: 4
Present buffer time: 4
Present buffer time: 15
Present buffer time: 1
Present buffer time: 1
Present buffer time: 1
Present buffer time: 11
Present buffer time: 1
Present buffer time: 6
Present buffer time: 1
Present buffer time: 1
Present buffer time: 25
Present buffer time: 6
Present buffer time: 7
Present buffer time: 1
Present buffer time: 10
Present buffer time: 7
Present buffer time: 3
Present buffer time: 1
Present buffer time: 12
Present buffer time: 9
Present buffer time: 6
Present buffer time: 9
你知道为什么在每隔几帧这个功能需要更多时间吗?
这是我的代码:
f64 time = -System::GetTime();
[m_context presentRenderbuffer:GL_RENDERBUFFER_OES];
Log("Present buffer time: %d\n", u32((System::GetTime() + time) * 1000.));
答
如果您没有明确地调用glFlush()
,则当您显示缓冲区时,驱动程序将被强制执行此操作,因为调用缓冲区上的渲染操作可能尚未完成。
在呈现缓冲区并分别测量缓冲区的时间之前,请尝试调用glFlush
。
答
渲染缓冲器演示实际上转到显示器可以被量化为30赫兹或60赫兹的刷新率。快速渲染可能实际上只是在先前的渲染完成之前丢弃之前的渲染。
+0
我使用显示链接并将其限制为60 Hz。我的更新+渲染时间约为3毫秒(〜1 +〜2,简单的2D动画),但由于此功能,我的fps约为50,并且时常下降到〜30 fps。当我使用NSTimer时,在使用显示列表之前我有同样的问题。我从用xcode创建的新的opengl项目模板复制显示列表代码。你能给我更多细节吗? – Felics 2011-02-27 19:03:42
你说得对。如果我使用glFlush(),这个函数会在常量(almoust)中执行。你知道为什么glFlush在不同的画面中需要不同的时间吗?我有相同的内容,但glFlush时间从1ms到30ms不等!感谢帮助! – Felics 2011-02-28 19:58:39
@Felics。也许一些其他的GPU任务正在运行......你是在全屏模式下工作吗? – kvark 2011-02-28 20:33:41
此代码在iPhone上。它是全屏的,我在一个线程中使用了opengl。我添加了与此相关的其他问题:http://stackoverflow.com/questions/5146987/glflush-time-varies-from-frame-to-frame-with-same-content-on-iphone – Felics 2011-02-28 20:40:46