在没有应用程序崩溃的情况下,可以在iphone的openGL中加载多少1024 * 1024个png?

时间:2009-12-18 14:38:36

标签: iphone opengl textures

大约是什么是可以在iphone中同时加载openGL的1024x1024 32位.png的最大数量?,没有应用程序崩溃的风险。

和.pvr?更高的数字?

如果我在游戏中需要大量的纹理,那么保持加载和调用dealloc以保持所有纹理不会使内存过载是健康的吗?

3 个答案:

答案 0 :(得分:5)

您应该根据需要加载纹理,并在应用程序收到内存不足警告时卸载未使用的纹理。

为了回答你的最大内存问题,似乎iPhone 2G / 3G在20 MB标记附近发出内存警告,iPhone 3GS开始发出大约128 MB的警告。

1024 * 1024 * 32 bits = 4 MB

所以在你收到警告之前加载了5个纹理。 1024 x 1024非常大(它是AFAIK中最大的一个)纹理,所以如果可能的话,你应该减小它们的大小

注意:我的警告阈值不是正式的,它们只是来自经验和stackoverflow上的其他问题。

答案 1 :(得分:5)

PVRTC可以与每个纹素的2位或4位一起使用,这是一个巨大的保存。不可能给出可安全使用的纹理内存量的特定数字。 Apple确实放弃了这一点,请参阅Noel Lopis的thisthis篇文章。

还要记住,如果你使用的是mipmap,它需要多33%的内存(每个mipmap是以上级别的1/4 => 1 + 1/4 + 1/16 ...〜= 1.33)。 / p>

编辑:如果您想要保留一个非常独特的Alpha掩码,则另外一个音符PVRTC无效。

答案 2 :(得分:2)

我希望当你说“并且调用dealloc”时你的意思是“并使用-release释放那些对象”,因为你自己永远不应该在任何对象上调用-dealloc。