Лучший метод определения iPad 1 или iPad 2? - PullRequest
5 голосов
/ 14 февраля 2012

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

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

Это Страница Apple не перечисляет ничего полезного для iPad 1 против 2, а в этой статье рассказывается о бенчмаркинге и различиях арок графического процессора, но не выявляет ничего похожего на то, что я могу запросить напрямую (например, количествотекстурные единицы или что-то еще).

У кого-нибудь есть мысли о том, как это сделать, или я что-то упускаю из виду?Спасибо.

Ответы [ 2 ]

10 голосов
/ 20 февраля 2012

Одно из различий, которое вы можете запросить, - это максимальный размер текстуры. На 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 (более подробно описано в « Что нового в iOS: iOS 5.0 »), но эти тесты будет работать только на iOS 5.0. У отставших на iOS 4.x эти возможности не будут регистрироваться.

1 голос
/ 02 мая 2015

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

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.

...