2012-02-03 75 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