2012-02-13 8 views
5

iPad 2 GPUの性能は、ウェイ iPad 1よりも優れています。私は、私のアプリを切り替えて、GPUがそれを処理できることを知っているときにいくつか余分な素敵なグラフィカルな微妙さを追加したいと思います。iPad 1とiPad 2のGPU判定に最適な手法は?

私はiPad 1と2(とそれ以降)の違いを本質的に検出できるようにしたいと考えています。私はスイッチを入れることができる無関係なものがたくさんありますが(カメラの存在など)、理想的にはGPUをより直接的に区別する何か、おそらくはOpenGL機能を探したいと思います。

このApple pageは2対iPadの1のために有益なものをリストアップし、ベンチマークとGPUアーチ違いについてthis article会談が、私は直接問い合わせることができるようになります。何でも(テクスチャユニットまたは任意の、例えば数)を正確に特定するものではありませんありません。

誰かがこれを行う方法について考えているのですか、それとも明白なものがありませんか?ありがとう。

+1

ねえ、私はこれは役立つはずだと思う:http://stackoverflow.com/questions/448162/determine-device-iphone-ipod-touch-with-iphone-sdk機能がUIDeviceからの戻り値によって決定されます。 IPad 2は "iPad2、x"として返されます。ここで "x"はIPad 2のサブバージョンです。 –

+2

機能の検出がここに行く方法ですか?このアプローチは、あらゆるブラウザのすべてのバージョンが異なる方法で動作するWebアプリケーションの野生の世界では意味をなさないかもしれませんが、iOSアプリケーションには当てはまりません。 iOSアプリは限られた特定のハードウェアとソフトウェアのセットで動作する予定です。あなたが知っているいくつかのデバイスの*ブラックリスト*は、あなたがうまく機能していないことが分かり、そうでない場合にはかわいらしい効果を有効にするでしょう。 – Charles

+1

@Charles - iPad 1と2のパフォーマンスには大きな違いがあるため、GPUの能力を判断するのは理にかなっています(いくつかのケースでは7Xの違いがあります)。 3Dコンテンツを表示するには、問題のデバイスの能力に応じて、テクスチャ、ジオメトリ、シェーダをスケールすることが本当に便利です。遅いデバイスのブラックリストはおそらくOKですが、OpenGL ESの能力ベースのソリューションは、Appleが古いGPUを使用している新しいモデルを展開してしまうのを防ぎますので、私はそれが少し好きです。 –

答えて

10

クエリの最大のテクスチャサイズは1つです。 iPad 2とiPhone 4Sの最大テクスチャサイズは4096 x 4096です。他のすべてのiOSデバイスでは2048 x 2048です。将来的にはより強力なiOSデバイスも最大テクスチャ少なくともこの大きさのサイズ。 、これはmaxTextureSizeで2048を返し、私のiPhone 4で

GLint maxTextureSize; 
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); 

はその後、最初にあなたのOpenGL ESコンテキストを作成し、最大テクスチャサイズを照会現在のコンテキストとして設定し、次のクエリを実行するにはしかし、私のiPad 2やiPhone 4Sにこれは、あなたがまた、EXT_shadow_samplersなどのiPad 2サポートは、(より「What's New in iOS: iOS 5.0」に記載されています)、いくつかの新しい拡張機能の存在をテストすることができます4096

の値をバック与えますこれらのテストはiOS 5.0でのみ動作します。引き続きiOS 4.xのStragglersには、これらの機能の登録はありません。

+0

Bradに感謝します。私はGPU全体で最大のテクスチャサイズの変更を見逃しました。これは良いshibbolethです。 –

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; 
} 

さらに詳しいバージョン番号を指定することで、特定のチップを区別することができます。例えばIMGSGX5の代わりにIMGSGX543を指定してください。

関連する問題