调整GLKView的大小
-
27-10-2019 - |
题
当一个 GLKView
调整大小后,有一些幕后操作发生在缓冲区和上下文上 GLKView
.在执行这些幕后操作所需的时间内,绘制到 GLKView
不产生正确的结果。
在我的情况下,我有一个 GLKView
那已经 setNeedsDisplay
启用,以便任何时候我需要更新它的内容在屏幕上,我只是打电话 -setNeedsDisplay
在那上面
GLKView
.我正在使用 GLKView
要绘制图像,所以如果我需要绘制具有不同大小的图像,我还需要更改 GLKView
.
问题出在哪里:当我改变大小的 GLKView
并打电话 setNeedsDisplay
在该视图中,屏幕上的结果不正确。这是因为 GLKView
在尝试绘制新图像之前,没有完成由新大小更改调用的幕后操作。
我通过打电话找到了一个解决这个问题的方法: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
而不仅仅是 setNeedsDisplay
在 GLKView
.这基本上迫使主线程等待所有幕后openGL操作完成后再调用 setNeedsDisplay
.虽然这工作正常,但我想知道是否有更好的解决方案。例如,是否有openGL调用使线程等待所有openGL操作完成后再继续?
解决方案
解决方案是重置 CIContext
对象后 GLKView
已经调整了大小。
谢谢你,大家!
不隶属于 StackOverflow