我正在做一些关于在 OpenGL ES 2.0 iOS 设备上加载 POT 与 NPOT 纹理的测试。
令人惊讶的是,NPOT 纹理(尺寸更小)似乎比下一个最大的 POT 纹理占用更多的内存。谁能解释为什么?
我的测试包括一个简单的应用程序,我在其中加载了一个非常大的纹理(我使用的是 cocos2d,所以这可能是这个引擎中的一个错误)。然后我使用这种方法输出内存使用情况。(我正在寻找一种更好的报告纹理内存的方法,请参见此处)。
NPOT 纹理为 1010x1708(RGBA4444 时为 3399 kB)。等效的 POT 纹理为 1024 x 2048(RGBA4444 时为 4096 kB)。
使用 POT 内存使用情况的应用程序使用情况稳定在 1600000 多字节(我运行了 3 次,这些值分别为:16261120、16232448 和 16240640)。NPOT 内存使用量稳定在 1900000 字节左右(19173376、19038208 和 19140608)。运行之间没有其他变化,只有纹理。
为什么,哦,为什么?:-)
注意:我在 iOS 6.1 上进行了这些测试(已知 iOS 5存在一个错误,导致 POT 纹理占用的内存比 NPOT 纹理多 33%。