6

当调整 aGLKView的大小时,会在缓冲区和 that 的上下文中发生一些幕后操作GLKView。在执行这些幕后操作所需的时间期间,绘图GLKView不会产生正确的结果。

在我的场景中,我启用了GLKViewthat setNeedsDisplay,因此每当我需要在屏幕上更新它的内容时,我只需-setNeedsDisplay调用 GLKView. 我是GLKView用来绘制图像的,所以如果我需要绘制不同大小的图像,我还需要更改GLKView.

问题:当我更改GLKView并调用setNeedsDisplay该视图的大小时,屏幕上的结果不正确。这是因为在GLKView尝试绘制新图像之前,尚未完成由新尺寸更改调用的幕后操作。

我通过调用:performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0而不是仅仅setNeedsDisplayGLKView. 这基本上强制主线程在调用之前等待所有幕后的 openGL 操作完成setNeedsDisplay。虽然这工作正常,但我想知道是否有更好的解决方案。例如,是否有一个 openGL 调用让线程在继续之前等待所有 openGL 操作完成?

4

1 回答 1

9

解决方案是在调整大小后重置CIContext对象GLKView

于 2012-04-07T22:57:27.327 回答