当调整
在我的情况下,我有一个启用了
问题在于:当我改变
我通过调用
GLKView
的大小时,会在该GLKView
的缓冲区和上下文中进行一些幕后操作。在执行这些幕后操作的时间内,对GLKView
的绘制不会产生正确的结果。在我的情况下,我有一个启用了
setNeedsDisplay
的GLKView
,因此每当我需要更新其屏幕内容时,我只需在该GLKView
上调用-setNeedsDisplay
。我正在使用GLKView
来绘制图像,因此如果我需要绘制具有不同大小的图像,则还需要更改GLKView
的大小。问题在于:当我改变
GLKView
的大小并在该视图上调用setNeedsDisplay
时,屏幕上的结果不正确。这是因为GLKView
在尝试绘制新图像之前尚未完成由新大小更改引发的幕后操作。我通过调用
performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
而非仅在GLKView
上调用setNeedsDisplay
来解决了这个问题。这基本上迫使主线程等待所有幕后的OpenGL操作完成后才调用setNeedsDisplay
。虽然这样可以正常工作,但我想知道是否有更好的解决方案。例如,是否有一个OpenGL调用可以使线程等待所有OpenGL操作完成后再继续?
CIContext
对象,如下所示:ci_context = [CIContext contextWithEAGLContext:glkView.context]
,然后调用[glkView display]
。请注意,这是很久以前的事情,我没有继续学习它,所以不要认为这是正确的方法。 - spybart