iPad 2 GPU的性能方式比iPad 1更好。当我知道GPU可以处理它时,我想切换我的应用程序并添加一些额外的精美图形细微之处。
所以我希望能够基本上检测到iPad 1和2(以及后者)之间的区别,理想情况下尽量使用尽可能接近能力检测。有很多不相关的东西我可以打开(相机的存在等),但理想情况下我想找到一些东西,也许是OpenGL功能,可以更直接地区分GPU。
这个Apple page没有列出对iPad 1和2有用的任何内容,而this article没有列出基准测试和GPU拱差异,但没有找到任何看似我可以直接查询的内容(例如数字)纹理单位或其他)。
任何人对如何做到这一点都有任何想法,或者我错过了一些明显的东西?感谢。
答案 0 :(得分:10)
您可以查询的一个区别是最大纹理大小。在iPad 2和iPhone 4S上,最大纹理尺寸是4096 x 4096,在所有其他iOS设备上它是2048 x 2048.在我看来,一个安全的假设是,未来更强大的iOS设备也将具有最大纹理尺寸至少这么大。
要查询最大纹理大小,首先创建OpenGL ES上下文,然后将其设置为当前上下文并运行以下查询:
GLint maxTextureSize;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);
在我的iPhone 4上,这会在maxTextureSize中返回2048,但在我的iPad 2和iPhone 4S上,这会返回4096的值。
您还可以测试iPad 2支持的一些新扩展程序的存在,例如EXT_shadow_samplers
(更多内容记录在“What's New in iOS: iOS 5.0”中),但这些测试仅适用于iOS 5.0 。仍然在iOS 4.x上的Stragglers将没有这些功能注册。
答案 1 :(得分:1)
今天有更多GPU可用,我就是根据自己的需要提出的。
enum GpuClass {
kGpuA5 = 0,
kGpuA6,
kGpuA7,
kGpuA8,
kGpuUnknown,
} ;
- (enum GpuClass)reportGpuClass {
NSString *glVersion = [NSString stringWithUTF8String:(char *)glGetString(GL_VERSION)];
if ([glVersion containsString:@"Apple A5"] || [glVersion containsString:@"S5L8"]) {
NSLog(@"Running on a A5 GPU");
return kGpuA5;
}
if ([glVersion containsString:@"Apple A6"] || [glVersion containsString:@"IMGSGX5"]) {
NSLog(@"Running on a A6 GPU");
return kGpuA6;
}
if ([glVersion containsString:@"Apple A7"] || [glVersion containsString:@"G6430"]) {
NSLog(@"Running on a A7 GPU");
return kGpuA7;
}
if ([glVersion containsString:@"Apple A8"] || [glVersion containsString:@"GXA6850"]) {
NSLog(@"Running on a A8 GPU");
return kGpuA8;
}
return kGpuUnknown;
}
您可以通过指定更多完整版本号来进一步区分特定芯片。例如指定IMGSGX543而不仅仅是IMGSGX5。