让 UIKit 处理 OpenGLES 1.1 中的设备旋转 - 它实际上会更慢吗?如果是的话,在什么情况下?

发布于 2024-10-11 09:13:20 字数 514 浏览 2 评论 0原文

我一直让 UIKit 为我处理设备旋转(我的 iOS 应用程序有一个实现 shouldAutorotateToInterfaceOrientation:UIViewController),而且我对它的简单性感到非常满意让一切正常运转。

但后来我被告知,这比手动完成所有轮换业务要慢。然而,我在 iPad (iOS 4.2) 或 iPod Touch 2G (也是 iOS 4.2) 上的测试并未证实这一点。

当我得知无论如何都会有很大的差异时,我有点惊讶,因为从 UIKit 的工作方式来看,OpenGLES 似乎没有任何范围可以进行页面翻转。因此 -[EAGLContext PresentRenderbuffer:] 几乎必须进行复制,无论旋转状态如何,这都将花费基本相同的时间。我认为旋转其他方面(主要是一般坐标变换)的开销同样可以忽略不计。

但这只是我的猜测,我只有我的眼睛来支持它!那么在某些情况下,让 UIKit 处理设备旋转确实会产生很大的不同吗?如果有,它们是什么?

I've been letting UIKit handle the device rotation for me (my iOS app has a UIViewController that implements shouldAutorotateToInterfaceOrientation:) and I've been pretty happy with how straightforward it was to get it all working.

I've since been told though that this is slower than doing all the rotation business manually. This hasn't been borne out by my tests, however, either on an iPad (iOS 4.2) or an iPod Touch 2G (also iOS 4.2).

I was a bit surprised to be told there would be a big difference anyway, as judging by how UIKit seems to work it doesn't look like there's any scope for OpenGLES to do a page flip. So -[EAGLContext presentRenderbuffer:] pretty much has to do a copy, which will take basically the same time regardless of rotation state. The overhead of the other aspects of rotation (general coordinate transforms, mainly) I'd imagine to be similarly negligible.

That's only my conjecture, though, and I have only my lying eyes to back it up! So are there cases where letting UIKit handle the device rotation does actually make a big difference? If so, what are they?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绝影如岚 2024-10-18 09:13:21

在以下设备上使用视图控制器处理旋转是最佳且推荐的解决方案:运行 iOS 4.2 及更高版本的 iPhone 3GS、iPhone 4、iPad、iPad 2、iPod touch 3G、iPod touch 4G。

如果您的应用程序在任何较旧的 iOS 设备上运行,您应该直接使用 OpenGL ES 执行旋转。巧合的是,建议使用此方法的设备是所有支持 OpenGL ES 2.0 的设备,因此其 OpenGL ES 1.1 管道是使用着色器实现的。

如果您想了解有关如何处理非 ES 2.0 设备上的轮换的更多信息,或确认此答案,您会发现 此处。

Using view controllers to handle rotation is the best and recommended solution on the following devices: iPhone 3GS, iPhone 4, iPad, iPad 2, iPod touch 3G, iPod touch 4G running iOS 4.2 and later.

If your application runs on any older iOS device, you should perform the rotation directly with OpenGL ES. Coincidentally, the devices on which this is recommended, are all devices that support OpenGL ES 2.0, and thus have their OpenGL ES 1.1 pipelines implemented using shaders.

If you'd like more information on how to handle the rotation on non-ES 2.0 devices, or confirmation of this answer, you'll find that here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文