1

私はCADisplayLinkを使用して、iOSで非常に単純なOpenGLESアニメーションの「更新」イベントを発生させています。アニメーションには、約10個のテクスチャクワッドがあります。これを60FPSで実行しようとしましたが、いくつかの不具合が発生しました。これを30FPSに変更すると、アニメーションがスムーズに実行されます。これをプロファイリングした後、ほとんどの時間がpresentRenderBufferに費やされていることがわかりました。

結果は次のとおりです。

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結果に変更すると、予期しない結果になります。

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

ご覧のとおり、使用すると数倍大きくなります

m_displayLink.frameInterval = 1;

からの最後のコマンドRender()glFinish()

なぜこの予期しない振る舞いがあるのか​​、あなたは何か考えがありますか?60 FPSを達成することは可能ですか(最初のプロファイリングから約500FPSです!)?

4

1 に答える 1

2

OpenGLの初期化をから移動することで問題を解決しました(幸運を祈ります!)view initWithFrame。これは非常に厄介に聞こえますが、これによりGPUの使用量が96%から6%に減少しました。これで、単純なアプリケーションは、2%のCPUと6%のGPU使用率で60 FPSで非常にスムーズに実行されます(そうあるべきです!)。

于 2013-01-10T07:42:53.643 に答える