iPhone和iPad:OpenGL ES通用应用程序难以为多个设备编写?

for*_*yez 3 iphone opengl-es objective-c ipad

我曾经有过将可可触控​​应用程序编写为通用应用程序(适用于ipad,iphone)的经验,并不是太难.我只需要为每个设备使用不同的.xib,但至少它是相同的二进制文件.

是否有可能拥有通用的opengl es应用程序?难道我需要为每个设备(iphone 3gs,iphone 4,ipad)分辨率不同吗?所以很可能我的代码对每个设备都不同???

Bra*_*son 6

虽然难度是一种主观衡量标准,但我认为,与基于更标准用户界面元素的设备相比,为各种设备开发以OpenGL-ES为中心的应用程序是一个更简单的过程.iPad版标准iPhone应用程序可能需要完全不同的界面布局,如果您正在进行全屏OpenGL ES绘图,您只需要将渲染层缩放到适当的屏幕尺寸即可.

例如,看看我的Molecules应用程序的代码(它可以在BSD许可下获得).它是一个通用的iPhone/iPad应用程序,在两个界面之间共享大量代码.实际上,几乎没有OpenGL ES部分基于该平台而改变.

当涉及Retina显示器之类的东西时,您只需在CAEAGLLayer主机视图的初始化中添加一些代码来考虑新的比例因子:

if ([self respondsToSelector:@selector(setContentScaleFactor:)])
{
    self.contentScaleFactor = [[UIScreen mainScreen] scale];
}
Run Code Online (Sandbox Code Playgroud)

没有其他任何东西需要改变,你的OpenGL ES内容现在将以更高的分辨率呈现.

您可能遇到的最大问题可能是,通过使用更高分辨率的显示器,您可能会发现自己的填充速率受限,而不是之前的旧iPhone.如果您看到OpenGL ES仪器中的渲染器利用率接近100%,那就是正在发生的事情.对于Retina显示器,您可能希望不以完整的2X比例因子渲染,而是稍微降低一些.