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);
}
它正在模擬器完全正常,但不設備。 任何人都可以在這裏發佈在設備上工作的紋理類嗎?