2009-08-04 36 views
0

我不確定問題出在哪裏。我的應用程序在模擬器上運行良好,但是當我嘗試在iPhone上運行它時,它在調試過程中崩潰或沒有使用信號「0」進行調試。我使用Apple提供的示例中的Texture2D.m和OpenGLES2DView.m。我使用庫中的Memory Tracer對儀器上的iPhone進行了應用程序分析,當應用程序死亡時,最終消耗的內存大約爲60Mb真實和90 + Mb虛擬。是否還有其他問題,或iPhone是否因爲消耗了太多內存而殺死應用程序?如果您需要任何信息,請說明,我會盡力提供。我在加載時創建了數千個紋理,這就是內存消耗如此之高的原因。真的無法做任何事情減少圖片被加載的數量。之前我剛剛在UIImage上運行,但它給了我非常低的幀速率。我在這個網站上讀到,我應該使用OpenGLES獲得更高的幀速率。iPhone OpenGLES:紋理消耗太多內存,程序崩潰,信號「0」

也有子問題有沒有辦法不使用UIImage來加載PNG文件,然後使用提供的Texture類來創建OpenGLES函數的紋理來使用它來繪製? OpenGLES中是否有一些函數會直接從png文件創建紋理?

回答

0

數以千計的紋理?真?一次有多少人在屏幕上?也許你一次只能加載其中一些,或者如果它們很小,你應該把它們合併成更少的更大的紋理。

我聽說的一般指導原則是,你限制在24MB的紋理內存。

從磁盤加載的OpenGLES沒有內置任何內容,但您可以使用像stb_image這樣的文件解析器自行完成。

+0

那麼有成千上萬的圖像加載,但只有少數顯示在約10-50的時間。 – CustomAppsMan 2009-08-05 04:27:33

+0

圖像大約是128x128像素。 – CustomAppsMan 2009-08-05 04:28:07

+0

我剛剛下載了stb_image.c文件,並將其編譯到我的項目中,並使用它來加載OpenGLES紋理,如下所示: int x,y,comp; void * data =(void *)stbi_load(fileName,&x,&y,&comp,0); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,x,y,0,GL_RGBA,GL_UNSIGNED_BYTE,data); 結果是整個屏幕變爲空白。在用UIImage加載的替代方法中,png工作正常。 當我寫這篇文章時,我只記得蘋果iPhone在綁定它們之前就損壞了.png文件。所以我會試着解決這個問題。 – CustomAppsMan 2009-08-05 05:08:46

0

我嘗試加載爲2048x2048像素的十個紋理塊。 紋理內存超過24MB,但iPhone3GS可以加載並渲染它。

我也推薦stb_image或SOIL紋理加載器。 (stb_image庫使用土壤庫。)