我一直在使用GLKView构建一个基于OpenGL的应用程序,其渲染方法由CADisplaylink触发。
到目前为止一直很好,至少在模拟器上..但是当我在物理设备上运行它时,我的更新例程只会在启动时触发一次。
我知道模拟器和物理设备之间存在很多差异,但是我希望有人可以了解CADisplaylink特有的任何内容以及可能导致它无法触发的内容吗?
我的设置如下:
view.enableSetNeedsDisplay = NO;
CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];
displayLink.frameInterval=1;
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
答案 0 :(得分:0)
所以,事实证明我的displayLink仍在运行,但它从来没有机会在设备上多次触发 - 有另一个基于计时器的事件在同一个runloop上触发,消耗了所有可用的CPU时间。 / p>
这并没有出现在模拟器中,因为它在模拟器中显然运行得更快,并且从不会受到争用。
限制该计时器事件已经允许displayLink再次触发,所以我现在的挑战是将计时器事件与另一个线程/ runloop解耦 - 而与displayLink完全无关。