iPhone OpenGLES:纹理消耗太多内存,程序因信号“0”而崩溃

时间:2009-08-04 20:53:36

标签: iphone

我不确定问题是什么。我的应用程序在模拟器上正常运行,但是当我尝试在iPhone上运行它时,它在调试期间崩溃或没有调试信号“0”。我正在使用Apple提供的示例中的Texture2D.m和OpenGLES2DView.m。我使用来自图书馆的内存跟踪器使用Instruments在iPhone上分析应用程序,当应用程序死亡时,最终消耗的内存大约为60Mb,虚拟为90 + Mb。是否存在其他问题,或者iPhone是否因为消耗了太多内存而导致应用程序被杀?如果您需要任何信息,请说明,我会尽力提供。我在加载时创建了数千个纹理,这就是内存消耗如此之高的原因。真的无法减少正在加载的照片数量。我刚刚在UIImage上运行,但它给了我很低的帧速率。我在这个网站上看到我应该使用OpenGLES来获得更高的帧速率。

另外一个问题是,有没有办法不使用UIImage加载png文件,然后使用提供的Texture类来创建OpenGLES函数的纹理以用于绘图? OpenGLES中是否有一些函数可以直接从png文件创建纹理?

2 个答案:

答案 0 :(得分:0)

成千上万的纹理?真?一次有多少人在屏幕上?也许你一次只能加载其中的一些,或者如果它们很小,你应该将它们组合成更少的更大的纹理。

我听说的一般准则是你只能使用24MB的纹理内存。

OpenGLES没有内置任何内容从磁盘加载,但您可以使用像stb_image这样的文件解析器自己完成。

答案 1 :(得分:0)

我尝试加载10个2048x2048像素的纹理片段。 纹理内存超过24MB,但iPhone3GS能够加载和渲染它。

我还推荐使用stb_image或SOIL纹理加载器。 (stb_image库使用SOIL库。)