【问题标题】:OpenGL ES texture working on Emulator but not on DeviceOpenGL ES 纹理在模拟器上工作但在设备上不工作
【发布时间】:2016-06-05 23:48:04
【问题描述】:

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

它在模拟器上运行得很好,但在设备上却不行。 任何人都可以在这里发布适用于设备的纹理类吗?

【问题讨论】:

    标签: android opengl-es texture-mapping


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多