我有一个质感很重的OpenGL游戏,我想根据设备有多少RAM调整.最高分辨率纹理我可以在iPhone 4或iPad2上正常工作,但较早的设备在加载纹理时会崩溃.我有这些纹理的低分辨率版本,但我需要知道什么时候使用它们.
我目前的策略是检测特定的旧设备(3GS具有低分辨率屏幕; iPad没有摄像头),然后仅加载IPad2及以上版本以及iPhone 4及更高版本的高分辨率纹理 – 我想我需要为iPod touch做点事情但是,我非常喜欢使用功能检测,而不是硬编码设备型号,因为型号检测对于未来对API和硬件的更改是脆弱的.
我正在考虑的另一种可能性是首先加载高分辨率纹理,然后在我获得低内存警告的那一刻放弃并替换它们.不过,我不知道我会有机会回应;我已经注意到,在调试控制台上出现任何通知之前,应用程序通常会死机.
如何检测我正在运行的设备是否没有足够的RAM来加载我的纹理的高分辨率版本?
退后一步,还有其他一些适用于OpenGL纹理内存的自适应技术吗?
笔记:
>我已经搜索了SO和有关可用RAM检测的答案,但它们基本上都建议使用内存使用情况,并消除浪费(最小化临时的生命周期以及所有这些).我已经尽可能多地完成了,我没有办法将高分辨率纹理压缩到旧设备中.
> PVRTC不是一个选项.纹理包含要由片段着色器使用的数据,并且必须以无损格式存储.
解决方法
要获取设备的总(最大)物理RAM,请使用[NSProcessInfo processInfo] .physicalMemory.