2011-02-27 148 views
3

我在我的游戏中添加了一个分析器并隔离了此功能。它有时会导致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.)); 

回答

3

如果您没有明确地调用glFlush(),则当您显示缓冲区时,驱动程序将被强制执行此操作,因为调用缓冲区上的渲染操作可能尚未完成。

在呈现缓冲区并分别测量缓冲区的时间之前,请尝试调用glFlush

+1

你说得对。如果我使用glFlush(),这个函数会在常量(almoust)中执行。你知道为什么glFlush在不同的画面中需要不同的时间吗?我有相同的内容,但glFlush时间从1ms到30ms不等!感谢帮助! – Felics 2011-02-28 19:58:39

+0

@Felics。也许一些其他的GPU任务正在运行......你是在全屏模式下工作吗? – kvark 2011-02-28 20:33:41

+0

此代码在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

0

渲染缓冲器演示实际上转到显示器可以被量化为30赫兹或60赫兹的刷新率。快速渲染可能实际上只是在先前的渲染完成之前丢弃之前的渲染。

+0

我使用显示链接并将其限制为60 Hz。我的更新+渲染时间约为3毫秒(〜1 +〜2,简单的2D动画),但由于此功能,我的fps约为50,并且时常下降到〜30 fps。当我使用NSTimer时,在使用显示列表之前我有同样的问题。我从用xcode创建的新的opengl项目模板复制显示列表代码。你能给我更多细节吗? – Felics 2011-02-27 19:03:42