Я создаю живые обои в Android с помощью OpenGL ES 2.0, и это действительно просто куча текстурированных прямоугольников, плавающих в пространстве. Моя проблема в том, что по какой-то причине загрузка этих текстур поглощает больше памяти, чем дистанционно разумно. Самое крупное изображение - 2078 кб, я загружаю только изображения размером 6-7 мб, а в соответствии с настройками -> Параметры разработчика -> Службы служб, в моем приложении используется 1,3 ГБ памяти.Текстуры Android OpenGL съедают огромные объемы памяти
Когда я удаляю загрузку текстуры, моя проблема, кажется, уходит (33 мб памяти), и, похоже, я не рисую текстуры или нет. Я не совсем уверен, что если
фрагмент кода моей текстуры кода загрузки:
Bitmap bmp = sceneSetter.getTexture(DataCodes.ROOM, DataCodes.FOUR_EIGHTY_P, DataCodes.BLUR_NONE);
// Bind texture to texturename
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texturenames[0]);
// Set filtering
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
//clamp texture to edge of shape
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
// Load the bitmap into the bound texture.
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
//texture 1
bmp = sceneSetter.getTexture(DataCodes.GIRL, DataCodes.FOUR_EIGHTY_P, DataCodes.BLUR_NONE);
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texturenames[1]);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
Вслед за этим в конце:
bmp.recycle();
sceneSetter получает растровое изображение из ресурсов, как это:
bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.testimage);
Редактировать: Итак, я тестирую это на Samsung S7, но когда я запустил его на Xperia Z3 compa ct «только» занимает 154 Мб памяти. Это все еще много, но значительно меньше, чем 1,3 ГБ, которые использует S7.
Каковы размеры изображения в пикселях? –
У меня есть несколько изображений с различными размерами изображений. У меня есть 1920 x 942,1191 x 892, 682 x 920 и т. Д. –