我尝试了所有方法,但我无法使OpenGL ES纹理在我的设备中运行,即使它在模拟器上运行也是如此。
源代码:
纹理类:
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);
}
它在仿真器上工作非常好,但不在设备上。 任何人都可以在这里发布在设备上工作的纹理类吗?
答案 0 :(得分:0)
检查下面的链接..我也遇到了同样的问题。我从链接中得到了解决方案。
Trying to draw textured triangles on device fails, but the emulator works. Why?