调整GLKView
的大小时,会在GLKView
的缓冲区和上下文上发生一些幕后操作。在执行这些幕后操作所花费的时间内,绘制到GLKView
不会产生正确的结果。
在我的方案中,我有GLKView
已启用setNeedsDisplay
,因此每当我需要在屏幕上更新其内容时,我只需在其上调用-setNeedsDisplay
GLKView
。我正在使用GLKView
来绘制图像,因此如果我需要绘制不同大小的图像,我还需要更改GLKView
的大小。
问题:当我更改GLKView
的大小并在该视图上调用setNeedsDisplay
时,屏幕上的结果不正确。这是因为在尝试绘制新图像之前,GLKView
没有完成新尺寸更改所调用的幕后操作。
我通过在performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
上致电:setNeedsDisplay
而不仅仅是GLKView
找到了解决方法。这基本上迫使主线程在调用setNeedsDisplay
之前等待所有幕后的openGL操作完成。虽然这项工作正常,但我想知道是否有更好的解决方案。例如,是否有一个openGL调用使线程等待所有openGL操作完成后再继续?
答案 0 :(得分:9)
解决方案是在CIContext
调整大小后重置GLKView
对象
大家好,谢谢你!