我有一个EAGLView
我在动画中调整大小的动画,动画由NSTimer
调用绘制函数的动画驱动。当我调整大小时EAGLView
,我需要调整视图的投影以保持内容的纵横比。绘制函数如下所示:
gameView.frame = newFrame;
[gameView setFramebuffer];
[self updateProjection];
/* Drawing to the EAGLView, gameView, here, then... */
[gameView presentFramebuffer];
但是,像这样运行,EAGLView 的内容似乎在动画“阶梯式”下降。当我记录下来并逐帧查看时,很明显调整了投影,然后在很短的时间内调整了视图的大小(不到一个动画帧)。
我怀疑原因是帧中的更改gameView
被推迟了,同时更新的帧缓冲区正在进入屏幕。我曾尝试使用CATransactions
让框架更新立即生效,但正如我对 UIView 更改的预期那样,这没有任何作用。我想我可以修改视口并保留EAGLView
全帧,但我担心这可能会让我在其他地方遇到同步问题(例如,更新任何覆盖的 CALayers)。
这看起来像是对问题的合理评估吗?我怎样才能防止它——也就是说,我怎样才能最好地确保帧缓冲区呈现与 EAGLView(和其他 CA 元素)的实际帧的变化一致?
谢谢!