检测比3GS更旧的iPhone硬件

时间:2011-05-19 09:56:14

标签: iphone objective-c

我有一个渲染密集型游戏并且使用png它太慢而无法在3G手机上运行。但它使用pvrtc运行速度很快,所以我需要知道我正在运行的模型。

问题:如何检测我正在运行的硬件?

非常感谢你的帮助!

5 个答案:

答案 0 :(得分:3)

您可能真正感兴趣的是您是使用PowerVR MBX硬件(如3G,原始iPhone,第一代和第二代iPod Touch和低端第三代iPod)还是PowerVR SGX硬件(与3GS和iPhone 4一样,iPad和iPod Touch都不在上面列表中。)

考虑到这一点,仅仅是:

EAGLContext *testContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

BOOL isSGX = testContext ? YES : NO;
[testContext release];

return isSGX;

SGX是可编程部件,可以支持ES 2,而MBX则不支持。 MBX也仅限于16MB的VRAM,而SGX则不然,这可能就是为什么你的应用程序在全脂纹理下运行不佳但pvrtc很好。

答案 1 :(得分:1)

您可以使用Erica Sadun的this class

答案 2 :(得分:1)

请参阅我的example gist,核心是以下方法:

- (NSString*) platformID
{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithUTF8String:machine];
    free(machine);
    return platform;
}

答案 3 :(得分:0)

仅针对ARM v7进行编译,3G之后的所有iPhone都是ARM v7。

这就是这个应用程序也是如此。

如果您想要检测旧硬件更容易,因为您正在创建胖二进制文件(支持ARMv6和ARMv7)。 有一个ARMv&的定义,现在找不到它。 这样您就不必在runt时循环该类型,只需为ARMv6和ARMv7创建一个胖二进制文件 然后用宏添加ARMv&的优化使用#if armv7宏。

答案 4 :(得分:0)

你也可以为armv6版本禁用Thumb。这将加速老款车型的游戏。但是,您应该为armv7架构启用Thumb。