我有一个渲染密集型游戏并且使用png它太慢而无法在3G手机上运行。但它使用pvrtc运行速度很快,所以我需要知道我正在运行的模型。
问题:如何检测我正在运行的硬件?
非常感谢你的帮助!
答案 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。