问题标签 [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 投票
2 回答
1444 浏览

ios - 在 iPhone 上使用 CADisplayLink 在 OpenGL ES 视图中进行等速旋转

我的 OpenGL ES 类和代码源自 Apple 的GLES2Sample 代码示例。我使用它们来显示 3D 对象围绕一个轴平滑旋转,我期望的旋转速度是恒定的。目前,应用程序使用的帧间隔为 1,每次绘制 OpenGL 视图(在 EAGLView 的drawView方法中),我都会将模型旋转一定角度。

在实践中,这给出了不错的结果,但并不完美:在旋转过程中,当物体的大部分消失时,渲染变得更快,因此旋转没有恒定的角速度。我的问题是:如何使它更平滑?

尽管我欢迎所有建议,但我已经有了一个想法:每半秒测量一次渲染 FPS,并在此基础上调整每次重绘时的旋转角度。但是,这听起来不太好,所以:您对此有何看法,您将如何处理这个问题?

0 投票
1 回答
4648 浏览

ios - UIScrollView 损坏并停止使用 OpenGL 渲染滚动(相关 CADisplayLink、NSRunLoop)

解决方案说明,不是问题。

UIScrollView注册时通过防止触发CADisplayLink滴答来暂停 OpenGL 渲染。CADisplayLinkNSDefaultRunLoopMode

但是,如果你NSRunLoopCommonModes用来解决这个问题,UIScrollView将在突发滚动时停止滚动。并且一旦停止,它就不会再次滚动。(破碎的)

并在其他线程/运行循环中注册 CADisplayLink (如本问题的回答所述:CADisplayLink 在 UIScrollView 滚动时停止更新)减少了 UIScrollView 行为破坏,但无法消除。

0 投票
3 回答
2792 浏览

iphone - 即使使用 CADisplayLink 也卡在 40 fps?

起初我使用 NSTimer 并遇到帧速率卡在每秒 40 帧的问题。我已阅读有关使用 CADisplayLink 解决问题的信息。它似乎工作了一段时间,但最近,应用程序从 60 开始,然后过了一会儿(大约 5 - 20 秒),应用程序开始以 40 - 41 fps 运行并卡在那里。而且我正在剔除,以便在物体不在视野范围内时减少绘制,但它仍然卡在那里。一种似乎确实可以暂时解决问题的不寻常方法(大约 10 秒)是将电线从 iphone 底部断开,然后重新连接。显然,这并不理想,只是想知道为什么会发生这种情况以及为什么它会在某种程度上修复它,就好像它重置了某些值或其他东西一样。任何帮助将不胜感激,谢谢。

0 投票
1 回答
731 浏览

iphone - CADisplayLink 的行为类似于 NSTimer,帧率错误

我已经实现了 CADisplayLink,但它的行为类似于 NSTimer,因为当有很多绘制时,它会将 fps 锁定到 40 并且永远不会离开那里,即使之后绘制的次数要少得多。这发生在 itouch 3 和 itouch 4 上。我使用 openGL 进行渲染,使用 openAL 进行声音。这是怎么回事。请帮忙!!!

0 投票
1 回答
1805 浏览

iphone - iPhone/iPad、OpenGL ES、CADisplayLink

我刚刚开始使用 OpenGL ES,主要是在 iPad 上,并注意到一些我无法找到答案的问题。首先,我尝试在同一个窗口中使用两个使用不同渲染器的 EAGLView。基本上认为 XCode 中的 OpenGL ES 示例项目,但有两个 EAGLViews 和两个渲染器等。现在这似乎在模拟器中不起作用,它只显示一个视图(它似乎运行渲染代码,但只有一个视图是用 openGL 显示),但是当在设备(使用 iOS 4.2 的 iPad)上运行时,它确实可以工作,至少这会导致下一个问题。

在这两个视图上使用 CADisplayLink 触发对渲染的更新。然而,这确实会导致一些问题。大多数情况下,片刻之后,其中一个视图的更新停止,其 CADisplayLink 停止触发。这只发生在设备上而不是模拟器中。它可以通过使用计时器而不是 CADisplayLink 来“修复”,或者在一个视图上使用计时器,在另一个视图上使用 DisplayLink,我想知道是什么原因造成的。我正在创建这样的显示链接(在两个视图中):

self.displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(drawView:)];

[displayLink setFrameInterval:animationFrameInterval];

[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

现在最后一个问题是关于我注意到的一件奇怪的事情。当在 iPad 模拟器中运行 Xcode 中提供的 OpenGL ES 示例项目时,视图的宽度调整为低于 760,它不会将任何内容呈现到屏幕上,它只涉及宽度,高度可以以任何方式调整大小。它只发生在模拟器中,而不是设备上。

所以问题基本上是上面提到的事情是错误、功能还是我做错了?

谢谢/j0h

0 投票
1 回答
1010 浏览

iphone - 为什么 CADisplayLink 在这种情况下不起作用?

我想使用 CADisplayLink 而不是 NSTimer 来制作一个正在移动的球的动画,但是使用 CADisplayLink 它不起作用。以下代码中可能存在什么问题?

0 投票
1 回答
575 浏览

iphone - CADisplayLink问题动画iphone xcode

大家好,我是法国人,所以请原谅我的英语不好。所以我的问题是,当我使用 CADisplayLink 以 60fps 为一张图像制作动画时,它工作正常,但当我想为两张图像制作动画时,我的速度接近 40fps。那我能做什么。请帮我 。谢谢你。

0 投票
1 回答
375 浏览

iphone - CADisplayLink 吞下异常

我注意到在使用 CADisplayLink 时,异常会被吞没:

运行此代码会产生以下输出:

这是 CADisplayLink 的正确行为吗?有没有办法让它在异常冒泡时中止程序,而不是展开堆栈并假装什么也没发生?

0 投票
1 回答
674 浏览

objective-c - Apple OpenGL ES 示例中的 CADisplayLink 和静态变量魔法

我想解释一下为什么 XCode 的 OpenGL ES Sample 有效。它执行以下操作来启动 drawFrame 方法(在 blablaViewController.m - 名称取决于项目的名称):

在 drawFrame 方法中,它执行以下操作:

我还不太了解Objective C,但是这个transY变量被重置,然后以相同的方法递增的方式非常奇怪。由于 GL_MODELVIEW 矩阵在移动之前被重置为单位,我认为它不能在 opengl 的某个地方保留一个累积值。

静态关键字是这里的诀窍吗?一旦某些东西被声明为静态一次,Objective C 是否会忽略所有未来的变量声明?

谢谢您的帮助!

0 投票
2 回答
1446 浏览

cocoa - 可可在不同屏幕上绘图会失去性能

我有一个基于文档的应用程序,其中每个文档都有一个带有 NSScrollView 的窗口,该窗口仅使用 Cocoa 进行一些(相当连续的)绘图。

为了调用绘图,我使用了 CVDisplayLink,如下代码所示:

渲染代码:

这很好用,而且动画很流畅......在一个屏幕上。

当我将一个文档从主屏幕移到第二台显示器上时,动画就变得像带有方形轮子的汽车一样流畅。当任何一个(或多个)文档在第二个屏幕上时,所有文档中的动画都会变差。主屏幕和副屏幕上不能有任何文档,动画也会降级。

我已经在多种类型的显示器和多台 Mac 上尝试过这个,总是以这些结果结束。为了确保这不是与 CVDisplayLink 相关的问题,我还尝试使用 NSTimer(CVDisplayLink 更可取)进行渲染,结果相同。

我究竟做错了什么?任何帮助是极大的赞赏。

编辑:我也尝试过使用基于线程的绘图,再次获得相同的结果。

编辑:我已经取得了一些进展,因为我的基于线程的绘图(基本上是一个while循环)仅在一个屏幕上工作得很好。(第二个或第一个)。