首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenGL ES presentRenderBuffer持续时间取决于frameInterval值

OpenGL ES presentRenderBuffer持续时间取决于frameInterval值
EN

Stack Overflow用户
提问于 2013-01-09 16:04:40
回答 1查看 1.2K关注 0票数 1

我使用CADisplayLink在iOS上为一个非常简单的OpenGL ES动画触发“更新”事件。动画大约有10个纹理四边形。我试图以60帧/秒的速度运行它,但我发现了一些小故障。将其更改为30 FPS时,动画运行更平滑。分析之后,我发现大部分时间都花在了presentRenderBuffer上。

结果如下:

代码语言:javascript
运行
复制
m_displayLink.frameInterval = 2;

[379406923.204] Update time 0.000358
[379406923.206] Render time 0.001402
[379406923.207] Present time 0.001136
[379406923.238] Update time 0.000370
[379406923.239] Render time 0.001393
[379406923.241] Present time 0.001148
[379406923.271] Update time 0.000368
[379406923.273] Render time 0.001377
[379406923.274] Present time 0.001226
[379406923.305] Update time 0.000380
[379406923.307] Render time 0.001390
[379406923.308] Present time 0.001183
[379406923.338] Update time 0.000375
[379406923.339] Render time 0.001376
[379406923.341] Present time 0.001178
[379406923.372] Update time 0.000981
[379406923.375] Render time 0.001418
[379406923.379] Present time 0.004452

m_displayLink.frameInterval = 2性能分析的结果中,我可以看到总的帧时间足以达到60 FPS,但当将m_displayLink.frameInterval值更改为1时,结果是意外的:

代码语言:javascript
运行
复制
m_displayLink.frameInterval = 1;  

[379407317.151] Update time 0.000204 
[379407317.152] Render time 0.000827 
[379407317.172] Present time 0.019173 
[379407317.172] Update time 0.000231 
[379407317.173] Render time 0.000856 
[379407317.201] Present time 0.027540 
[379407317.202] Update time 0.000204 
[379407317.202] Render time 0.000834 
[379407317.218] Present time 0.015187 
[379407317.218] Update time 0.000192 
[379407317.219] Render time 0.000803 
[379407317.251] Present time 0.031392 
[379407317.252] Update time 0.000215 
[379407317.253] Render time 0.000858 
[379407317.267] Present time 0.014433 
[379407317.268] Update time 0.000196 
[379407317.269] Render time 0.001248 
[379407317.301] Present time 0.031312

如您所见,当前时间是使用

代码语言:javascript
运行
复制
m_displayLink.frameInterval = 1;

请注意,来自Render()的最后一个命令是glFinish()

你知道为什么会有这种意想不到的行为吗?有没有可能达到60FPS(从第一次分析开始,我有大约500FPS!)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-10 15:42:54

我解决了这个问题(纯粹是运气!)通过从view initWithFrame移动OpenGL初始化。我知道这听起来很尴尬,但这使我的GPU使用率从96%降到了6%。现在,这个简单的应用程序以60FPS、2%的CPU和6%的GPU使用率非常流畅地运行(正如它应该的那样!)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14230702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档