2011-07-16 56 views
0

我嘗試了一切,但我無法讓OpenGL ES紋理在我的設備中工作,即使它在仿真器上工作。OpenGL ES紋理在模擬器上工作,但不在設備上

源代碼:

Texture類:

public class XAndroidTexture 
{ 
    private int[] textures = new int[1]; 
    public int width, height; 
    Bitmap bmp; 

    public XAndroidTexture(GL10 gl, Bitmap bitmap) 
    { 
     gl.glEnable(GL10.GL_TEXTURE_2D); 
     this.bmp = bitmap; 
     width = bmp.getWidth(); 
     height = bmp.getHeight(); 
     gl.glGenTextures(1, textures, 0); 
     // ...and bind it to our array 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 

     // create nearest filtered texture 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 

     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); 

     gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE); 
     // Use Android GLUtils to specify a two-dimensional texture image from our bitmap 
     GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 
     //GLUtils.texSubImage2D(GL10.GL_TEXTURE_2D, 0, 0, 0, bmp); 

     // Clean up 
     bitmap.recycle(); 

    } 

    public void bind(GL10 gl) 
    { 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 
    } 

    public static XAndroidTexture createTextureFromBitmap(GL10 gl, Bitmap bmp) 
    { 
     return new XAndroidTexture(gl, bmp); 
    } 
} 

紋理加載函數:

public XAndroidTexture Textureload(String path) 
    { 
     InputStream is; 
     Bitmap bmp = null; 
     try 
      { 
       is = this.getAssets().open(path); 

       BitmapFactory.Options opts = new BitmapFactory.Options(); 
       opts.inDither = true; 
       Bitmap tBmp = BitmapFactory.decodeStream(is, null, opts); 
       bmp = Bitmap.createBitmap(tBmp.getWidth(), tBmp.getHeight(), Bitmap.Config.ARGB_8888); 
       Canvas canvas = new Canvas(bmp); 
       canvas.drawBitmap(tBmp, 0, 0, null); 
       canvas.save(); 
       tBmp.recycle(); 
       tBmp = null; 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
      if(bmp == null) 
       return null; 
      else 
       return new XAndroidTexture(gl, bmp); 
    } 

它正在模擬器完全正常,但不設備。 任何人都可以在這裏發佈在設備上工作的紋理類嗎?

回答

相關問題