2012-02-13 2 views
5

iPad 2 GPU의 성능은 입니다. iPad 1보다 낫습니다. GPU가 처리 할 수 ​​있다는 것을 알았을 때 내 앱을 전환하고 멋진 멋진 그래픽을 추가하고 싶습니다.iPad 1 대 iPad 2 GPU 결정을위한 최고의 기술?

그래서 iPad 1과 2 (그리고 그 이후)의 차이를 근본적으로 감지 할 수 있기를 바랍니다. 가능한 한 능력 감지에 가깝게 사용하는 것이 이상적입니다. 내가 전환 할 수있는 많은 무관 한 것들이 있지만 (카메라의 존재 등), 이상적으로는 GPU를 더 직접적으로 구별하는 무언가, 아마도 OpenGL 기능을 찾고 싶습니다.

Apple page은 iPad 1 vs 2에 유용한 정보를 표시하지 않으며 this article은 벤치마킹 및 GPU 아치 차이점에 대해 이야기하지만 직접 쿼리 할 수있는 것 (예 : 텍스처 단위 수 등)은 찾아 볼 수 없습니다.

누구든지이 작업을 수행하는 방법에 대한 의견이 있거나 분명하지 않은 것이 있습니까? 감사.

+1

이봐, 도움이 될 것 같아 : http://stackoverflow.com/questions/448162/determine-device-iphone-ipod-touch-with-iphone-sdk 기능은 UIDevice에서 반환 값에 의해 결정됩니다. IPad 2는 "iPad2, x"로 반환됩니다. 여기서 "x"는 IPad 2의 하위 버전입니다. –

+2

기능 검색이 여기로가는 길입니까? 이러한 접근 방식은 모든 브라우저의 모든 버전이 다르게 작동하는 웹 응용 프로그램의 야생 세계에서 의미가있을 수 있지만 iOS 응용 프로그램에 적용되는지는 확실하지 않습니다. iOS 앱은 제한된 특정 하드웨어 및 소프트웨어 집합에서 실행됩니다. 당신은 아마 당신이 잘 수행하지 않는 장치의 소수의 * 블랙리스트 *, 그렇지 않으면 예쁜 효과를 켜고 안전 할 거라고. – Charles

+1

@Charles - iPad 1과 2의 성능 차이가 크기 때문에 GPU의 성능을 판단하는 것이 좋습니다. (어떤 경우에는이 둘의 7X 차이점을 보았습니다.) 3-D 컨텐츠를 표현하기 위해서는 문제의 장치의 힘에 따라 텍스처, 지오메트리 및 셰이더를 스케일하는 것이 정말 유용 할 수 있습니다. 더 느린 장치 블랙리스트는 아마도 괜찮은 편이지만, OpenGL ES 기능 기반 솔루션은 Apple이 구형 GPU를 사용하는 새로운 모델을 출시 할 때 보호해야하기 때문에 조금 좋아집니다. –

답변

10

쿼리 할 수있는 유일한 차이점은 최대 텍스처 크기입니다. iPad 2 및 iPhone 4S의 최대 텍스처 크기는 4096 x 4096이며 다른 모든 iOS 기기의 경우 2048 x 2048입니다. 미래의보다 강력한 iOS 기기가 최대 텍스처를 가질 것이라는 가정은 안전합니다. 최소한이 크기는 커요. 이것은 maxTextureSize 2048을 반환, 내 아이폰 4에

GLint maxTextureSize; 
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); 

:

는, 먼저는 OpenGL ES 컨텍스트를 생성, 최대 텍스처 크기를 쿼리 현재 컨텍스트로 설정하고 다음 쿼리를 실행하려면 하지만 내 아이 패드 2와 아이폰 4S에이, 당신은 또한 EXT_shadow_samplers과 아이 패드 2가 지원 (더 "What's New in iOS: iOS 5.0"에 설명되어 있습니다) 새로운 확장의 존재를 테스트 할 수 있습니다 4096

의 값을 돌려 준다 이러한 테스트는 iOS 5.0에서만 작동합니다. iOS 4.x를 사용하는 낙오자는 해당 기능을 등록하지 않습니다.

+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을 지정하십시오.

관련 문제