【问题标题】:CADisplaylink differences between simulator and physical deviceCADisplaylink模拟器和物理设备的区别
【发布时间】:2023-03-16 16:27:01
【问题描述】:

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

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

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

我的设置是这样的:

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

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

【问题讨论】:

    标签: ios opengl-es cadisplaylink


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 2012-07-08
      • 2012-11-27
      • 2017-09-02
      • 2013-10-16
      相关资源
      最近更新 更多