问题标签 [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.
ios - 使用基于 AVCapture 的 viewController 崩溃
我正在开发一个在 UIViewController 内使用 OpenGL VideoCapture 的应用程序
在此控制器的第一次初始化中,我在控制台中收到此消息:
该消息在 viewController 初始化后立即显示
之后,如果我切换到另一个控制器并再次启动此控制器,则会在使用 EXC_BAD_ACCESS 启动 ViewController 2/4 后发生崩溃
asm 输出没有太大帮助
源代码的一些相关部分:
有什么建议可以跟踪这次崩溃吗?
ios - 对于 iPad 和 iPhone,使用 CADisplayLink 是否必须为 60fps?
换句话说,我们可以选择每秒 20 次调用处理程序,还是每秒 45 次,还是必须每秒 60 次?
我想模拟它的一种方法是使用给处理程序的时间戳来确定它是否是“还没有采取行动的时间”——如果不是,直接返回而不做任何事情?
uinavigationcontroller - IOS:CADisplay / UIScrollview 和导航控制器
所以我已经设法让我可爱的 GLKit 3D 菜单与 UIScrollview 一起工作,并且生活很好,直到我推到另一个视图控制器并回来。
所以完全平滑的运动,移动到下一个控制器并回来。UIScrollview 不能很好地反弹或流动?
每次滚动视图移动和停止时,CADisplay Link 都会初始化并且为零,这似乎工作正常,直到我推送到另一个控制器并返回。
随机地,如果我单击一个导致滚动视图移动并触发所有代码的项目,它就会重新启动。可悲的是,如果我尝试在视图上触发它确实出现它不会做同样的事情。
iphone - CADisplayLink Timestamp 在设备上的行为很奇怪
对于我的游戏循环和某些动画,我想知道自上次调用 render: 方法以来经过的时间间隔。
为此,我使用 CADisplayLink 并获取当前时间戳并减去最后一次调用的时间戳。这应该给我两个帧/调用之间的正确时间间隔。
在模拟器中运行应用程序时,我得到了各种不同的间隔值,这看起来很好。但是,如果我在 iPad 上运行该应用程序,我只会得到两个不同的间隔值:0.000 和 0.125。大多数情况下,这两个值交替出现。
这是我用来确定间隔的代码。
每次调用 render 方法时都会执行此代码。
这是 iPad 的一些限制,它不会给我的间隔时间提供准确的结果吗?
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 运行,直到它随机下降。
提前感谢任何可以让我了解为什么会发生这种情况的人。
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() 函数中几乎没有与游戏相关的计算时,这个问题甚至出现在我的菜单屏幕上。
我不明白发生了什么以及为什么重新启动总能在一段时间内解决这个问题。
iphone - iOS 6.0 上的 CADisplayLink 未保留目标
我有这样的代码:
在 iOS 6.0(在 5.1 中,此代码工作正常),当此代码调用时我有两个变体:EXC_BAD_ACCESS 或'调用无法识别的选择器“调用”'。似乎 displayLinkWithTarget:selector: 方法不保留目标。当我添加 [invocation retain] 行时,代码可以正常工作。是iOS 6.0的bug吗?
iphone - 带有 CADisplayLink 和 Touch 事件的 runloop 事件的顺序?
我想知道是否在同一运行循环周期中的 displayLink 之前调用了触摸事件。有谁知道这个问题的答案?
ios - 为什么 UIScrollView 会暂停我的 CADisplayLink?
我有一个由 CAEAGLLayer 支持的视图,它位于 UIScrollView 内。当我开始滚动时,调用 openGL 视图的 -draw 方法的 CADisplayLink 停止被调用。
我验证了滚动时不会调用我的 runloop 启动/停止方法。-draw 方法根本不会在滚动开始时立即被调用,而是在滚动结束时继续被调用。
UIKit 是否会在滚动开始后立即停止 CADisplayLink 触发?
显示链接被添加到运行循环中,如下所示:
可能这个run loop模式和UIScrollView有冲突?即使 UIScrollView 正在滚动,是否还有其他运行循环模式或替代解决方案来保持 CADisplayLink 触发?
我认为任何应用程序中都可以有不止一个 CADisplayLink。那是错的吗?
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
会在这里提供更好的性能。