检测早于3GS的iPhone硬件
我有一个渲染密集型游戏,使用png在3G手机上运行太慢了。但是它使用pvrtc运行得很快,所以我需要知道我运行的是什么型号 问题:如何检测正在运行的硬件检测早于3GS的iPhone硬件,iphone,objective-c,Iphone,Objective C,我有一个渲染密集型游戏,使用png在3G手机上运行太慢了。但是它使用pvrtc运行得很快,所以我需要知道我运行的是什么型号 问题:如何检测正在运行的硬件 非常感谢你的帮助 仅为ARM v7编译,3G之后的所有iPhone都是ARM v7 这就是layar应用程序的功能 如果您想检测较旧的硬件,则更容易,因为您正在创建一个fat二进制文件(支持ARMv6和ARMv7)。 ARMv有一个定义&,只是现在找不到它。 这样,您就不必在运行时循环该类型,只需为ARMv6和ARMv7创建一个fat二进制文件
非常感谢你的帮助 仅为ARM v7编译,3G之后的所有iPhone都是ARM v7 这就是layar应用程序的功能 如果您想检测较旧的硬件,则更容易,因为您正在创建一个fat二进制文件(支持ARMv6和ARMv7)。 ARMv有一个定义&,只是现在找不到它。 这样,您就不必在运行时循环该类型,只需为ARMv6和ARMv7创建一个fat二进制文件 然后使用一个宏为ARMv添加优化&使用#if armv7宏 你可以用Erica Sadun的 参见我的,核心是以下方法:
- (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;
}
您还可以为armv6版本禁用Thumb。这将加快旧款游戏的速度。不过,对于armv7体系结构,您应该启用Thumb。您可能真正感兴趣的是,您使用的是PowerVR MBX硬件(如3G、原装iPhone、第一代和第二代iPod Touchs以及低端第三代iPod)还是PowerVR SGX硬件(与3GS和iphone4一样,ipad和ipodtouch都不在上述列表中) 考虑到这一点,我们就:
EAGLContext *testContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
BOOL isSGX = testContext ? YES : NO;
[testContext release];
return isSGX;
SGX是一个可编程部件,可以支持ES 2,MBX不是。MBX也限制为16mb的VRAM,而SGX不是,这可能就是为什么你的应用程序在全脂纹理上运行不佳,但在pvrtc上运行良好的原因。如果我正确理解这个问题,他不想锁定较旧的设备,他想更改实现根据硬件。您可以使用
info.plist
中的“UIRequiredDeviceCapabilities”键来设置armv7
要求。@Deepak:这不是OP想要的。是的,不是。这将使应用程序对旧设备不可用。这将是最好的解决方案(如果可行的话)。最好检查您需要的特定功能,而不是检查硬件型号。这正是我需要的!我喜欢人们知道他们在做什么!谢谢!