整个上午我一直在努力解决这个问题。我还没有能够在设备上进行测试,我只依赖于剖析器显示的内容,大致看不出有什么重大问题。我认为其中一个严重的事实是,无论何时我在Cocos2d或自定义代码中创建2D纹理 - 直接提供openGL,我都在探查器中将所有纹理显示为两个分配。
E.g。当我创建一个大约1MB数据的纹理512x512x4时,我的实时字节使用量会跳跃2MB,我可以在活动对象列表中看到两个重的内存块1Mb - 正如我的纹理一样。
让我强调一点 - 这不是我提供给glTexImage2D()的原始图像文件,它在析构函数中被删除,我已经多次检查过了。我在Cocos2d示例项目中也观察到了这个问题 - 简单的纹理所有内存都加倍了。
以下两个screeshots - 一个来自cocos2d应用程序,显示两个纹理600KB,每个纹理在探查器中显示为四个分配的对象:
和自定义分配和创建的纹理直接使用openGL和通过libpng提供的图像 - 显示为每个1Mb的实时两个对象。
如果有人能在这一点上给我启发,我将不胜感激。也许在设备情况看起来不同。
此致 第
答案 0 :(得分:1)
这是cocos2d中的正常行为。它首先将图像文件加载为UIImage,然后将其转换为CCTexture2D。这意味着在大多数情况下,内存使用量是您预期的两倍。下一帧应该释放额外的内存。
您可以在我的memory optimization blog post中找到有关此行为的更多信息。您还将了解到使用.pvr.ccz不仅会显着降低内存开销,而且加载速度也会比PNG快得多(更不用说在cocos2d中加载速度非常慢的JPG)。