调整GLKView的大小时,会在该GLKView的缓冲区和上下文上执行一些幕后操作。在执行这些幕后操作的过程中,绘制到GLKView不会产生正确的结果。
在我的场景中,我有一个启用了setNeedsDisplay的GLKView,所以每当我需要在屏幕上更新它的内容时,我只需在该GLKView上调用-setNeedsDisplay。我使用GLKView来绘制图像,所以如果我需要绘制不同大小的图像,我还需要更改GLKView的大小。
问题:当我更改GLKView的大小并对该视图调用setNeedsDisplay时,屏幕上的结果不正确。这是因为在尝试绘制新图像之前,GLKView尚未完成由新大小更改调用的幕后操作。
我找到了一个解决方法,调用:performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0,而不仅仅是GLKView上的setNeedsDisplay。这基本上强制主线程在调用setNeedsDisplay之前等待所有幕后openGL操作完成。虽然这个方法运行良好,但我想知道是否有更好的解决方案。例如,是否有一个openGL调用使线程在继续之前等待所有openGL操作完成?
发布于 2012-04-08 06:57:27
解决方案是在调整GLKView大小后重置CIContext对象。
https://stackoverflow.com/questions/7829761
复制相似问题