OpenGL ES纹理在仿真器上工作但在设备上没有

时间:2011-07-16 10:05:08

标签: android opengl-es texture-mapping

我尝试了所有方法,但我无法使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);
    }

它在仿真器上工作非常好,但不在设备上。 任何人都可以在这里发布在设备上工作的纹理类吗?

1 个答案:

答案 0 :(得分:0)

检查下面的链接..我也遇到了同样的问题。我从链接中得到了解决方案。

Trying to draw textured triangles on device fails, but the emulator works. Why?