当一个 GLKView 调整大小后,有一些幕后操作发生在缓冲区和上下文上 GLKView.在执行这些幕后操作所需的时间内,绘制到 GLKView 不产生正确的结果。

在我的情况下,我有一个 GLKView 那已经 setNeedsDisplay 启用,以便任何时候我需要更新它的内容在屏幕上,我只是打电话 -setNeedsDisplay 在那上面 GLKView.我正在使用 GLKView 要绘制图像,所以如果我需要绘制具有不同大小的图像,我还需要更改 GLKView.

问题出在哪里:当我改变大小的 GLKView 并打电话 setNeedsDisplay 在该视图中,屏幕上的结果不正确。这是因为 GLKView 在尝试绘制新图像之前,没有完成由新大小更改调用的幕后操作。

我通过打电话找到了一个解决这个问题的方法: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0 而不仅仅是 setNeedsDisplayGLKView.这基本上迫使主线程等待所有幕后openGL操作完成后再调用 setNeedsDisplay.虽然这工作正常,但我想知道是否有更好的解决方案。例如,是否有openGL调用使线程等待所有openGL操作完成后再继续?

有帮助吗?

解决方案

解决方案是重置 CIContext 对象后 GLKView 已经调整了大小。
谢谢你,大家!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top