gpt4 book ai didi

ios - 如何在 iOS 应用程序中设置所需的渲染频率 (FPS)?

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:15 25 4
gpt4 key购买 nike

我在带有 renderOneFrame 方法/处理程序的 iOS 应用程序上使用 CADisplayLink。我的理解是这是每次屏幕刷新时触发的,即 60Hz。

但是我的应用很难以 60FPS 的速度运行,并且要添加更多功能,我担心在旧硬件上这是不可行的。与其让它以可变速率运行,我宁愿以 30FPS 渲染并给自己更多的喘息空间。

有没有办法让这件事轻松发生?

这似乎是它的核心,但我是一个移植到 iOS 的 C++ 编码器,所以它有点困惑(我从我找到的示例中复制它):

- (void)go {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
mLastFrameTime = 1;
mStartTime = 0;

try {
app = new MyApp()
} catch( Ogre::Exception& e ) {
std::cerr << "An exception has occurred: " <<
e.getFullDescription().c_str() << std::endl;
}

mDate = [[NSDate alloc] init];
mLastFrameTime = -[mDate timeIntervalSinceNow];

mDisplayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(renderOneFrame:)];
[mDisplayLink setFrameInterval:mLastFrameTime];
[mDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[pool release];
}

最佳答案

这是 Apple 文档中关于 CADisplayLink 属性 frameInterval 的描述:

The default value is 1, which results in your application being notified at the refresh rate of the display. If the value is set to a value larger than 1, the display link notifies your application at a fraction of the native refresh rate. For example, setting the interval to 2 causes the display link to fire every other frame, providing half the frame rate.

Setting this value to less than 1 results in undefined behavior and is a programmer error.

在你的例子中,你很可能将帧间隔设置为一个非常小的数字,很容易小于 1。如果你想让它更新,你应该将它设置为 1每次刷新屏幕。否则,您应该将其设置为 2 以获得一半。

但是请注意,它没有具体提及帧速率是什么。据我所知,所有当前和现有的 iOS 设备的屏幕刷新率为 60 Hz,但没有什么可说的,Apple 不会有一天发布刷新率为 120 Hz 的设备。所以现在,将 frameInterval 设置为 2 将产生 30 fps 的帧速率,但在某些 future 的设备上它可能会产生 60 fps 的帧速率。无论如何,该设备的速度可能足以以该帧速率处理您的绘图代码,但这只是一个引用。此外,似乎没有任何方法可以通过编程方式仅检索该帧速率值,但您始终可以测量绘制帧之间的时间以查看帧之间的时间间隔,并进行一些数学计算以获得帧速率。

关于ios - 如何在 iOS 应用程序中设置所需的渲染频率 (FPS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21289761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com