2012-02-13 16 views
5

Hiệu suất của iPad 2 GPU là cách tốt hơn so với iPad 1. Tôi muốn chuyển đổi trong ứng dụng của mình và thêm một chút tinh tế đồ họa đẹp khi tôi biết GPU có thể xử lý nó.Kỹ thuật tốt nhất cho iPad 1 và iPad 2 GPU xác định?

Vì vậy, tôi muốn có thể phát hiện cơ bản sự khác biệt giữa iPad 1 và 2 (và sau này), lý tưởng sử dụng gần với khả năng phát hiện nhất có thể. Có rất nhiều thứ không liên quan tôi có thể bật (sự hiện diện của máy ảnh, v.v.), nhưng lý tưởng là tôi muốn tìm một thứ gì đó, có thể là khả năng OpenGL, giúp phân biệt trực tiếp GPU hơn.

Apple page không liệt kê bất kỳ điều gì hữu ích cho iPad 1 vs 2 và this article nói về điểm chuẩn và khác biệt của vòm GPU nhưng không xác định bất kỳ thứ gì trông giống như tôi có thể truy vấn trực tiếp (ví dụ: số đơn vị kết cấu hoặc bất kỳ thứ gì).

Bất cứ ai cũng có bất kỳ suy nghĩ nào về cách thực hiện việc này hoặc tôi có thiếu điều gì đó hiển nhiên không? Cảm ơn.

+1

Xin chào, tôi nghĩ điều này sẽ hữu ích: http://stackoverflow.com/questions/448162/determine-device-iphone-ipod-touch-with-iphone-sdk Các khả năng được xác định bởi giá trị trả lại từ UIDevice. IPad 2 được trả về là "iPad2, x" trong đó "x" là phiên bản phụ của IPad 2. –

+2

Bạn có chắc chắn rằng khả năng phát hiện là cách để đi đến đây? Cách tiếp cận đó có thể có ý nghĩa trong thế giới hoang dã của các ứng dụng web, trong đó mọi phiên bản của mọi trình duyệt đều hoạt động khác nhau, nhưng tôi không chắc nó có áp dụng cho các ứng dụng iOS hay không. Ứng dụng iOS sẽ chạy trên một bộ phần cứng và phần mềm cụ thể có giới hạn. Có thể bạn sẽ an toàn với danh sách đen * của một số thiết bị mà bạn biết không hoạt động tốt, bật các hiệu ứng đẹp khác. – Charles

+1

@Charles - Trong trường hợp này, nó có ý nghĩa để xác định sức mạnh của GPU, bởi vì có một sự khác biệt lớn trong hiệu suất giữa iPad 1 và 2 (tôi đã thấy sự khác biệt 7X giữa hai trong một số trường hợp). Để trình bày nội dung 3-D, nó có thể thực sự hữu ích để mở rộng kết cấu, hình học và bóng đổ tùy thuộc vào sức mạnh của thiết bị được đề cập. Danh sách đen thiết bị chậm hơn có thể là OK, nhưng tôi thích giải pháp dựa trên khả năng OpenGL ES của tôi tốt hơn một chút, vì điều đó sẽ bảo vệ chống lại Apple tung ra một số mô hình mới sử dụng GPU cũ hơn. –

Trả lời

10

Một điểm khác biệt bạn có thể truy vấn là kích thước họa tiết tối đa. Trên iPad 2 và iPhone 4S, kích thước họa tiết tối đa là 4096 x 4096, trên tất cả các thiết bị iOS khác là 2048 x 2048. Có vẻ như tôi là một giả thiết an toàn cho tương lai, các thiết bị iOS mạnh mẽ hơn cũng sẽ có kết cấu tối đa kích thước ít nhất là lớn này.

Để truy vấn cho kích thước kết cấu tối đa, đầu tiên tạo ra bối cảnh OpenGL ES của bạn, sau đó đặt nó như là bối cảnh hiện nay và chạy các truy vấn sau đây:

GLint maxTextureSize; 
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); 

Trên iPhone của tôi 4, này trả về 2048 trong maxTextureSize, nhưng trên iPad 2 và iPhone 4S của tôi, giá trị này là 4096.

Bạn cũng có thể kiểm tra sự hiện diện của một số tiện ích mở rộng mới mà iPad 2 hỗ trợ, chẳng hạn như EXT_shadow_samplers (được ghi thêm trong "What's New in iOS: iOS 5.0"), nhưng những thử nghiệm đó sẽ chỉ hoạt động trên iOS 5.0. Stragglers vẫn còn trên iOS 4.x sẽ không có khả năng đăng ký.

+0

Cảm ơn Brad. Tôi đã bỏ lỡ sự thay đổi kích thước kết cấu tối đa trên các GPU. Đây là một shibboleth tốt. –

1

Hôm nay với nhiều GPU khả dụng hơn, đây là những gì tôi đã đưa ra cho các nhu cầu của riêng tôi.

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

Bạn có thể phân biệt rõ hơn giữa các chip cụ thể bằng cách chỉ định số phiên bản đầy đủ hơn. ví dụ. chỉ định IMGSGX543 thay vì chỉ IMGSGX5.

Các vấn đề liên quan