2012-04-18 6 views
0

私はOpenGL ESシーンを再描画するためにCADisplayLink(20FPSで動作)を使用します。私がこれをすると、200回以上のタッチイベントでタッチとビートとタッチの間に大きな遅れがあることが分かりました。CADisplayLinkはtouchesBeganとtouchesEndedの間に遅れを生じますか?

CADisplayLinkをオフにすると、遅延は50msに短縮されます。どのようにこの問題を解決するのか知っていますか?

答えて

2

特に指定していないため、CADisplayLinkがメインスレッドで実行されているとします。その場合、レンダリングアクションでメインスレッドをオーバーロードし、タッチイベントが処理されないようにすることができます(すべてのタッチイベントはメインスレッドで処理されます)。

私の解決策は、OpenGL ESのレンダリングアクションにシリアルGCDキューを使用し、ディスパッチセマフォと組み合わせて、CADisplayLinkの起動に応答して一度に1つのフレームしかレンダリングされないようにすることでした。 This answer of mineはプロセスを詳細に記述しており、これを使用するアプリケーションのソースコードにリンクしています。副次的なメリットとして、新しいマルチコアデバイスでレンダリング速度を最大40%向上させることができます。

関連する問題