问题标签 [cadisplaylink]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
971 浏览

ios - 使用基于 AVCapture 的 viewController 崩溃

我正在开发一个在 UIViewController 内使用 OpenGL VideoCapture 的应用程序

在此控制器的第一次初始化中,我在控制台中收到此消息:

该消息在 viewController 初始化后立即显示

之后,如果我切换到另一个控制器并再次启动此控制器,则会在使用 EXC_BAD_ACCESS 启动 ViewController 2/4 后发生崩溃

asm 输出没有太大帮助

源代码的一些相关部分:

有什么建议可以跟踪这次崩溃吗?

0 投票
1 回答
418 浏览

ios - 对于 iPad 和 iPhone,使用 CADisplayLink 是否必须为 60fps?

换句话说,我们可以选择每秒 20 次调用处理程序,还是每秒 45 次,还是必须每秒 60 次?

我想模拟它的一种方法是使用给处理程序的时间戳来确定它是否是“还没有采取行动的时间”——如果不是,直接返回而不做任何事情?

0 投票
1 回答
381 浏览

uinavigationcontroller - IOS:CADisplay / UIScrollview 和导航控制器

所以我已经设法让我可爱的 ​​GLKit 3D 菜单与 UIScrollview 一起工作,并且生活很好,直到我推到另一个视图控制器并回来。

所以完全平滑的运动,移动到下一个控制器并回来。UIScrollview 不能很好地反弹或流动?

每次滚动视图移动和停止时,CADisplay Link 都会初始化并且为零,这似乎工作正常,直到我推送到另一个控制器并返回。

随机地,如果我单击一个导致滚动视图移动并触发所有代码的项目,它就会重新启动。可悲的是,如果我尝试在视图上触发它确实出现它不会做同样的事情。

0 投票
1 回答
1095 浏览

iphone - CADisplayLink Timestamp 在设备上的行为很奇怪

对于我的游戏循环和某些动画,我想知道自上次调用 render: 方法以来经过的时间间隔。

为此,我使用 CADisplayLink 并获取当前时间戳并减去最后一次调用的时间戳。这应该给我两个帧/调用之间的正确时间间隔。

在模拟器中运行应用程序时,我得到了各种不同的间隔值,这看起来很好。但是,如果我在 iPad 上运行该应用程序,我只会得到两个不同的间隔值:0.000 和 0.125。大多数情况下,这两个值交替出现。

这是我用来确定间隔的代码。

每次调用 render 方法时都会执行此代码。

这是 iPad 的一些限制,它不会给我的间隔时间提供准确的结果吗?

0 投票
2 回答
442 浏览

frame-rate - iPhone 3GS 和 iPhone 4 上的 CADisplayLink 从 60 FPS 随机下降到 40 FPS

我正在使用 CADisplayLink 以 60 FPS 执行名为 gameLoop 的功能,起初应用程序运行良好。然后在随机时间(可能是 5 秒或 1 分钟),fps 下降到 40 FPS 左右。

经过几天的论坛搜索、调试、优化渲染、分析和分析我的应用程序,我决定从 gameLoop 函数中删除所有内容,除了几行计算自上次调用 gameLoop 以来的时间。我无法弄清楚为什么 CADisplayLink 以 60 FPS 调用 gameLoop 一段时间,然后在 gameLoop 几乎什么都不做时以 40 FPS 调用它。

我实现了一个暂停/取消暂停功能,它使显示链接无效并重新启动它。当我重新启动显示链接时,应用程序再次以 60 FPS 运行,直到它随机下降。

提前感谢任何可以让我了解为什么会发生这种情况的人。

0 投票
1 回答
453 浏览

ios - 使用 CADisplayLink 的 iOS OpenGL ES 1.1 生涩动画(重启修复了一段时间)

我正在使用 OpenGL ES 1.1 和 CADisplayLink 为 3d 场景设置动画。如果 iOS 设备最近重新启动,动画是平滑的,并且两次 displayLink.timestamp 调用之间的时间增量相当均匀。但是在使用 iOS 设备几个小时或几天后,我的应用程序有时会运行几次,动画会变得不稳定,时间增量会上升,然后重置为较低的值,然后再次上升。

像这样:

2012-09-01 23:42:58.770 [2678:707] dt= 0.021139

2012-09-01 23:42:58.787 [2678:707] dt= 0.022183

2012-09-01 23:42:58.804 [2678:707] dt= 0.023223

2012-09-01 23:42:58.820 [2678:707] dt= 0.024270

2012-09-01 23:42:58.837 [2678:707] dt= 0.009679

2012-09-01 23:42:58.853 [2678:707] dt= 0.010750

2012-09-01 23:42:58.870 [2678:707] dt= 0.011766

2012-09-01 23:42:58.887 [2678:707] dt= 0.012806

2012-09-01 23:42:58.903 [2678:707] dt= 0.013847

2012-09-01 23:42:58.920 [2678:707] dt= 0.014890

2012-09-01 23:42:58.937 [2678:707] dt= 0.015933

2012-09-01 23:42:58.953 [2678:707] dt= 0.016976

2012-09-01 23:42:58.970 [2678:707] dt= 0.018011

2012-09-01 23:42:58.987 [2678:707] dt= 0.019055

2012-09-01 23:42:59.003 [2678:707] dt= 0.020097

2012-09-01 23:42:59.020 [2678:707] dt= 0.021143

2012-09-01 23:42:59.037 [2678:707] dt= 0.022181

2012-09-01 23:42:59.054 [2678:707] dt= 0.023222

2012-09-01 23:42:59.071 [2678:707] dt= 0.024288

2012-09-01 23:42:59.087 [2678:707] dt= 0.009624

2012-09-01 23:42:59.103 [2678:707] dt= 0.010728

2012-09-01 23:42:59.121 [2678:707] dt= 0.011763

2012-09-01 23:42:59.137 [2678:707] dt= 0.012808

2012-09-01 23:42:59.153 [2678:707] dt= 0.013847

2012-09-01 23:42:59.170 [2678:707] dt= 0.014891

2012-09-01 23:42:59.187 [2678:707] dt= 0.016002

2012-09-01 23:42:59.203 [2678:707] dt= 0.016979

2012-09-01 23:42:59.220 [2678:707] dt= 0.018016

2012-09-01 23:42:59.237 [2678:707] dt= 0.019042

2012-09-01 23:42:59.253 [2678:707] dt= 0.020099

2012-09-01 23:42:59.270 [2678:707] dt= 0.021138

2012-09-01 23:42:59.287 [2678:707] dt= 0.022185

2012-09-01 23:42:59.304 [2678:707] dt= 0.023222

2012-09-01 23:42:59.320 [2678:707] dt= 0.024265

2012-09-01 23:42:59.337 [2678:707] dt= 0.009681

2012-09-01 23:42:59.354 [2678:707] dt= 0.010736

然后,如果重新启动 iOS 设备,动画又会变得流畅。

当 UpdateAnimation() 函数中几乎没有与游戏相关的计算时,这个问题甚至出现在我的菜单屏幕上。

我不明白发生了什么以及为什么重新启动总能在一段时间内解决这个问题。

0 投票
2 回答
2429 浏览

iphone - iOS 6.0 上的 CADisplayLink 未保留目标

我有这样的代码:

在 iOS 6.0(在 5.1 中,此代码工作正常),当此代码调用时我有两个变体:EXC_BAD_ACCESS 或'调用无法识别的选择器“调用”'。似乎 displayLinkWithTarget:selector: 方法不保留目标。当我添加 [invocation retain] 行时,代码可以正常工作。是iOS 6.0的bug吗?

0 投票
0 回答
369 浏览

iphone - 带有 CADisplayLink 和 Touch 事件的 runloop 事件的顺序?

我想知道是否在同一运行循环周期中的 displayLink 之前调用了触摸事件。有谁知道这个问题的答案?

0 投票
1 回答
3047 浏览

ios - 为什么 UIScrollView 会暂停我的 CADisplayLink?

我有一个由 CAEAGLLayer 支持的视图,它位于 UIScrollView 内。当我开始滚动时,调用 openGL 视图的 -draw 方法的 CADisplayLink 停止被调用。

我验证了滚动时不会调用我的 runloop 启动/停止方法。-draw 方法根本不会在滚动开始时立即被调用,而是在滚动结束时继续被调用。

UIKit 是否会在滚动开始后立即停止 CADisplayLink 触发?

显示链接被添加到运行循环中,如下所示:

可能这个run loop模式和UIScrollView有冲突?即使 UIScrollView 正在滚动,是否还有其他运行循环模式或替代解决方案来保持 CADisplayLink 触发?

我认为任何应用程序中都可以有不止一个 CADisplayLink。那是错的吗?

0 投票
1 回答
1124 浏览

opengl-es - 为什么即使我不滚动,dispatch_semaphore_wait() 也一直返回 YES?

Brad Larson为滚动视图滚动时的冻结问题提供了解决方案。CADisplayLink

我的 OpenGL ES 绘制方法由 a 调用CADisplayLink,我尝试了 Brad 的技术,但无法使其工作。核心问题是我的 OpenGL ES 视图由 a 托管UIScrollView,当 UIScrollView滚动时,CADisplayLink停止触发。

Brad 描述的技术应该让CADisplayLink即使在滚动期间也能继续触发(通过将其添加到NSRunLoopCommonModes而不是默认的 runloop 模式),并且使用花哨的信号量技巧渲染回调应该确保它在 UIKit 时不会渲染太占了。

问题在于信号量技巧无论如何都会阻止渲染回调绘制。

首先,我在我的 OpenGL ES 视图的方法中创建串行 GCD 队列和信号量,initWithFrame如下所示(在主线程上):

显示链接已创建并添加到NSRunLoopCommonModes

渲染回调执行 Brad 的技术:

dispatch_semaphore_wait函数总是返回YES,因此渲染回调永远不会渲染。即使我不滚动。

我想我在这里错过了一些重要的事情。有人可以指出吗?

编辑:它似乎只在我调用dispatch_sync而不是调用时才有效dispatch_async,但根据布拉德的说法,它dispatch_async会在这里提供更好的性能。