EAGLView
アニメーションでサイズを変更しているものがあります。アニメーションNSTimer
は、描画関数を呼び出すによって駆動されます。サイズを変更するEAGLView
ときは、コンテンツのアスペクト比を維持するために、ビューの投影を調整する必要があります。描画関数は次のようになります。
gameView.frame = newFrame;
[gameView setFramebuffer];
[self updateProjection];
/* Drawing to the EAGLView, gameView, here, then... */
[gameView presentFramebuffer];
ただし、このように実行すると、EAGLViewのコンテンツがアニメーションを「階段状」に下がるように見えます。それを記録してフレームごとに見ると、投影が調整されていることは明らかです。その後、ビューのサイズが非常に短時間で変更されます(1アニメーションフレーム未満)。
その理由は、のフレームの変更gameView
が延期されていることと、その間に更新されたフレームバッファが画面に表示されていることによるものと思われます。CATransactions
フレームの更新をすぐに有効にするためにを使用してみましたが、UIViewの変更を期待していたので、何もしませんでした。ビューポートを変更してEAGLView
フルフレームのままにすることはできると思いますが、それによって他の場所で同期の問題が発生する可能性があるのではないかと心配しています(たとえば、オーバーレイされたCALayerの更新など)。
これは問題の合理的な評価のように思われますか?どうすればそれを防ぐことができますか?つまり、フレームバッファの表示がEAGLView(および他のCA要素)の実際のフレームの変更と一致することを最も確実にするにはどうすればよいですか?
ありがとう!