Android OpenGL: возможно, не хватает памяти? - PullRequest
0 голосов
/ 04 февраля 2012

Я пытался решить эту проблему в течение нескольких недель, но сейчас я не знаю, что делать сейчас.

Я думаю, что на некоторых устройствах Android недостаточно памяти для загрузки количества текстур, хотя это может быть причиной чего-то иного, поскольку я сказал, что действительно не знаю, что с этим делать.

Всего загружено 28 PNG всего 1024x1024, что в сумме составляет 4,8 мг. Ниже приведен метод OpenGL для загрузки текстур

    GL10 gl = glGraphics.getGL();
    int[] textureIds = new int[1];
    gl.glGenTextures(1, textureIds, 0);
    textureId = textureIds[0];

    InputStream in = null;
    try {
        in = fileIO.readAsset(fileName);
        Bitmap bitmap = BitmapFactory.decodeStream(in);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        setFilters(GL10.GL_LINEAR , GL10.GL_LINEAR);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
        width = bitmap.getWidth();
        height = bitmap.getHeight();
        bitmap.recycle();
    } catch(IOException e) {
        throw new RuntimeException("Couldn't load texture '" + fileName +"'", e);
    } finally {
        if(in != null)
            try { in.close(); } catch (IOException e) { }
    }

На моем Desire HD проблем нет, но на HTC Cha Cha многие текстуры вообще не отображаются, а на Galaxy S две текстуры просто кажутся белыми. Ча Ча выдает эту ошибку при загрузке текстур

02-04 15: 46: 28.907: E / Adreno200-ES20 (1501): override1 = 0xfffffffe, override2 = 0xfff *

Странно, если Ча Ча заблокирован (текстуры OpenGL уничтожены), а затем разблокирован (перезагружены текстуры), то конкретные текстуры, которых там изначально не было, теперь есть, однако различные текстуры теперь не видны.

Это проблема с памятью? Если так, есть ли способ обойти это?

Спасибо

1 Ответ

1 голос
/ 04 февраля 2012

Правильное решение - текстура сжатие, а не сжатие PNG. PVR-TC даст вам большую часть того, что вам нужно. На 4-битном уровне вы бы понизились до 12 МБ вместо 117 МБ. Даже при использовании изображений с более низкой разрядностью, таких как форматы RGB-565 (16 бит на пиксель), ваши потребности сократятся вдвое.

Кроме того, вам не нужно использовать текстуры 1024x1024 для телефонов; это своего рода излишество. Вы могли бы, вероятно, сойти с 512x512 изображений. В сочетании с PVR-TC вам потребуется всего 3 МБ для всех этих текстурных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...