2012-02-03 76 views
1

我似乎有一個奇怪的問題,在一個電話兩個紋理不加載,因爲它們顯示爲白色矩形,但是,它們都加載在我的手機上。另一個問題是,在恢復遊戲的加載屏幕顯示時,這在第一次應用程序暫停時效果很好,但在第二次恢復後紋理不會加載到我的手機上......但是加載屏幕加載的紋理全部出現精細。Android OpenGL一些紋理不加載/重載

所有的紋理都是2的冪,都是024x1024 ......總共有20個紋理。

問題類型的原因是什麼?

這裏是重新加載代碼...

public void onSurfaceCreated(GL10 gl, EGLConfig config) {   
     super.onSurfaceCreated(gl, config); 
     if(firstTimeCreate) { 
      load();   //load settings 
      Assets.Load(this); 
      firstTimeCreate = false;    
     } else { 
      //When screen is resumed.... 
      Assets.ReloadLoadingScreen(); 
     } 

這就是一切,這是load方法...

GL10 gl = glGraphics.getGL(); 
     int[] textureIds = new int[1]; 
     gl.glGenTextures(1, textureIds, 0); 
     textureId = textureIds[0]; 

     InputStream in = null; 
     try { 
      in = fileIO.readAsset(fileName); 
      Bitmap bitmap = BitmapFactory.decodeStream(in); 
      gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId); 
      GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 
      setFilters(GL10.GL_LINEAR , GL10.GL_LINEAR);   
      gl.glBindTexture(GL10.GL_TEXTURE_2D, 0); 
      width = bitmap.getWidth(); 
      height = bitmap.getHeight(); 
      bitmap.recycle(); 
     } catch(IOException e) { 
      throw new RuntimeException("Couldn't load texture '" + fileName +"'", e); 
     } finally { 
      if(in != null) 
       try { in.close(); } catch (IOException e) { } 
     } 

和綁定方法...

public void bind() { 
GL10 gl = glGraphics.getGL(); 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId); 
} 

不要認爲上述的任何錯誤,但也許有?

回答

0

我認爲我們需要一些更多的細節來正確指出您的方向。不幸的是,有這麼多事情可能導致這個問題。

您正在加載您的紋理onSurfaceCreated?當您暫停應用程序並繼續時,這些紋理需要在OpenGL中重新綁定。

另外,如果您使用的是Eclipse,LogCat窗口中是否有任何錯誤?

您可能想要做的一件事是啓用OpenGL調試標誌進行測試。你可以找到關於此這裏的信息:

http://developer.android.com/resources/articles/glsurfaceview.html

+0

加入幾乎所有的加載代碼 – Chris 2012-02-03 14:56:51