我有一个EAGLView
,我正在通过动画调整其大小,动画由调用绘图函数的NSTimer
驱动。当我调整EAGLView
的大小时,我需要调整视图的投影以保持内容的纵横比。 绘图函数如下:
gameView.frame = newFrame;
[gameView setFramebuffer];
[self updateProjection];
/* Drawing to the EAGLView, gameView, here, then... */
[gameView presentFramebuffer];
像这样运行时,EAGLView的内容似乎会“阶梯状”下降动画。 当我逐帧录制并查看它时,很明显投影被调整,然后视图稍后(不到一个动画帧)被调整大小。
我怀疑原因是
gameView
帧的更改被推迟了,并且在此期间更新的帧缓冲区正在向屏幕传输。 我尝试使用CATransactions
立即使帧更新生效,但是像我预计的那样,对于UIView更改,这没有任何作用。 我想我可以修改视口并保留EAGLView
全屏,但我担心这可能会在其他地方(例如,与任何重叠的CALayer更新同步)留下同步问题。这是否似乎是问题的合理评估? 如何防止这种情况-即如何最好确保帧缓冲区呈现与EAGLView(以及其他CA元素)实际帧的更改相一致?
谢谢!
EAGLView
足够大:您是在屏幕外绘制吗?”的意思是什么? - Vinzzz