Как определить максимальную текстуру памяти на Android OpenGL ES - PullRequest
14 голосов
/ 13 февраля 2012

Я пишу смешанную 2D / 3D игру для Android и не могу определить, сколько текстурной памяти я могу использовать.Есть ли способ определить максимальную текстурную память в OpenGL ES?

У меня есть свой кеш текстур, и я хочу узнать максимальный порог памяти текстур.Я делаю приблизительную оценку, используя activityManager.getMemoryInfo(mi), но на некоторых устройствах, когда я пытаюсь выделить текстуру (и многие другие уже находятся в памяти), происходит сбой приложения (EGL_BAD_ALLOC).Когда я устанавливаю этот порог на более низкое значение, кажется, все в порядке.У кого-нибудь есть идеи?Или, в конце концов, как определить, что выделение текстуры было неудачным, а не сбой.

1 Ответ

5 голосов
/ 09 марта 2013

Похоже, вы пытаетесь узнать, сколько доступно VRAM (видео RAM). На вопрос уже частично дан ответ.

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

Метод 1

Из этой темы вы можете получить максимальное количество текстурных единиц; это означает максимальное число, которое может быть связано одновременно:

int[] maxSize = new int[1];
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxSize, 0);

А из этого другого вы можете получить максимальный размер текстуры:

int[] maxNum = new int[1];
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, maxNum, 0);

Таким образом, по логике вы можете по крайней мере вписать maxSize[0] ² × maxNum[0] пикселей в VRAM без проблем. Даже если в VRAM не хватает места, графический драйвер будет управлять нами (что может включать сбой приложения в случае голодания).

В любом случае, вы, вероятно, не будете настраивать размер ваших текстур в зависимости от количества VRAM или доступных пикселей; это возможно, но не выгодно, портативно и сложно реализовать должным образом. Есть способ лучший способ сделать это:

Метод 2

99% времени, количество VRAM на графическом чипе пропорционально размеру экрана. Таким образом, использует DPI экрана (ldpi, mdpi, hdpi, xhdpi) , чтобы определить, какую версию (размер) текстуры загружать (экспериментировать с различными (реальными) устройствами), так что вы в безопасности «Подходит ли оно для этого устройства?».

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