0

我一直在使用 GLKView 构建一个基于 OpenGL 的应用程序,渲染方法由 CADisplaylink 触发。

到目前为止一切顺利,至少在模拟器上。但是当我在物理设备上运行它时,我的更新例程只被触发一次 - 在启动时。

我了解模拟器和物理设备之间存在许多差异,但我希望有人可以阐明 CADisplaylink 特有的任何内容以及可能导致它不触发的原因?

我的设置是这样的:

view.enableSetNeedsDisplay = NO;
CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];

displayLink.frameInterval=1;
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
4

1 回答 1

0

因此,事实证明我的 displayLink 仍在运行,但它从来没有机会在设备上多次触发 - 在同一个 runloop 上触发了另一个基于计时器的事件,消耗了所有可用的 CPU 时间。

这并没有出现在模拟器中,因为它显然在模拟器中运行得更快,并且永远不会受到争用的影响。

限制该计时器事件允许 displayLink 再次触发,所以我现在的挑战是将计时器事件解耦到另一个线程/运行循环 - 与 displayLink 完全无关。

于 2015-06-28T22:37:54.747 回答