iPad 1与iPad 2 GPU决心的最佳技术?

时间:2012-02-13 23:38:20

标签: ios ipad gpu

iPad 2 GPU的性能方式比iPad 1更好。当我知道GPU可以处理它时,我想切换我的应用程序并添加一些额外的精美图形细微之处。

所以我希望能够基本上检测到iPad 1和2(以及后者)之间的区别,理想情况下尽量使用尽可能接近能力检测。有很多不相关的东西我可以打开(相机的存在等),但理想情况下我想找到一些东西,也许是OpenGL功能,可以更直接地区分GPU。

这个Apple page没有列出对iPad 1和2有用的任何内容,而this article没有列出基准测试和GPU拱差异,但没有找到任何看似我可以直接查询的内容(例如数字)纹理单位或其他)。

任何人对如何做到这一点都有任何想法,或者我错过了一些明显的东西?感谢。

2 个答案:

答案 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。