Текстура OpenGL ES работает на эмуляторе, но не на устройстве - PullRequest
0 голосов
/ 16 июля 2011

Я перепробовал все, но не могу заставить текстуру 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 голосов
/ 26 августа 2011

Проверьте ссылку ниже .. У меня тоже такая же проблема.Я получил решение по ссылке.

Попытка нарисовать текстурированные треугольники на устройстве не удалась, но эмулятор работает.Почему?

...