【问题标题】:iPhone & iPad: Is an OpenGL ES Universal App a pain to write for multiple devices?iPhone 和 iPad:为多个设备编写 OpenGL ES 通用应用程序会很痛苦吗?
【发布时间】:2010-11-13 10:25:53
【问题描述】:
我有编写可可触摸应用程序作为通用应用程序(适用于 ipad、iphone)的经验,这并不难。我只需要为每个设备使用不同的 .xib,但至少它是相同的二进制文件。
是否也可以有一个通用的 opengl es 应用程序?考虑到我必须为每个设备(iphone 3gs、iphone 4、ipad)设置不同的分辨率,这很难吗?所以很可能我的代码对于每个设备都会有所不同???
【问题讨论】:
标签:
iphone
objective-c
ipad
opengl-es
【解决方案1】:
虽然难度是一种主观衡量标准,但我认为为各种设备开发以 OpenGL-ES 为中心的应用程序比基于更多标准用户界面元素的应用程序更简单。在 iPad 版本的标准 iPhone 应用程序可能需要完全不同的界面布局的情况下,如果您正在执行全屏 OpenGL ES 绘图,您只需将渲染层缩放到适当的屏幕尺寸即可。
例如,看看我的Molecules 应用程序的代码(它在 BSD 许可下可用)。它是一个通用的 iPhone/iPad 应用程序,在两个界面之间共享大量代码。事实上,OpenGL ES 部分几乎没有任何基于平台的变化。
当涉及到像 Retina 显示器这样的东西时,您只需在 CAEAGLLayer 托管视图的初始化中添加一点代码来说明新的比例因子:
if ([self respondsToSelector:@selector(setContentScaleFactor:)])
{
self.contentScaleFactor = [[UIScreen mainScreen] scale];
}
无需更改其他任何内容,您的 OpenGL ES 内容现在将以更高的分辨率呈现。
您可能会遇到的最大问题是,通过使用更高分辨率的显示器,您可能会发现自己在旧款 iPhone 上的填充率受到限制。如果您在 OpenGL ES 工具中看到渲染器利用率接近 100%,那就是正在发生的事情。对于 Retina 显示器,您可能不想以完整的 2X 比例因子进行渲染,但要稍微低一些。
【解决方案2】:
我无法透露您的详细信息,但我有一个通用应用程序,它使用 OpenGL-ES。就我的目的而言,glViewport() 调用负责处理事情。