2012-02-13 2 views
5

Производительность IPad 2 GPU способ лучше, чем iPad 1. Я хотел бы переключиться на свое приложение и добавить дополнительную приятную графическую тонкость, когда узнаю, что GPU может ее обработать.Лучшая техника для iPad 1 против iPad 2?

Таким образом, я хотел бы иметь возможность существенно различать различия между iPad 1 и 2 (и более поздними), в идеале используя как можно ближе к обнаружению возможностей. Есть много несвязанных вещей, которые я мог бы включить (наличие камеры и т. Д.), Но в идеале я хотел бы найти что-то, возможно, функцию OpenGL, которая больше отличает GPU.

Этот Apple page не перечисляет ничего полезного для iPad 1 против 2 и 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

Вы уверены, что обнаружение возможностей - это путь сюда? Этот подход может иметь смысл в диком мире веб-приложений, где каждая версия каждого браузера делает что-то по-другому, но я не уверен, что это относится к приложениям iOS. Приложения iOS будут работать на ограниченном конкретном наборе аппаратного и программного обеспечения. Вероятно, вы будете в безопасности с * черным списком * из нескольких устройств, которые, как вы знаете, не работают хорошо, в противном случае включите красивые эффекты. – Charles

+1

@Charles - В этом случае имеет смысл определить мощность GPU, потому что есть огромная разница в производительности между iPad 1 и 2 (в некоторых случаях я видел 7-процентные различия между ними). Для представления 3-D контента может быть очень полезно масштабировать текстуры, геометрию и шейдеры в зависимости от мощности рассматриваемого устройства. Более медленный черный список устройств, вероятно, в порядке, но мне лучше нравится решение на базе OpenGL ES, потому что это должно защитить Apple от развертывания новой модели, использующей более старый графический процессор. –

ответ

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, это возвращает 2048 в maxTextureSize, но на мой IPad 2 и iPhone 4S это возвращает значение 4096.

Вы также можете проверить на наличие некоторых новых расширений, что IPad 2 поддерживает, такие как EXT_shadow_samplers (более задокументированы в «What's New in iOS: iOS 5.0»), но эти тесты будут работать только на iOS 5.0. Остальные на iOS 4.x не будут иметь эти возможности.

+0

Спасибо, Брэд. Я пропустил максимальное изменение размера текстуры на графических процессорах. Это хороший шибболет. –

1

Сегодня с большим количеством графических процессоров, вот что я придумал для своих нужд.

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.

Смежные вопросы