Подтвердить что ты не робот

Как определить максимальную текстурную память на Android OpenGL ES

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

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

4b9b3361

Ответ 1

Кажется, что вы пытаетесь узнать доступ к видеомагнитофону VRAM (видеопамять). Вопрос уже частично ответил.

Однако количество 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), чтобы определить, какую версию (размер) текстуры загрузить (эксперимент с разные (реальные) устройства), поэтому вы можете быть уверены в том, что "будет ли он соответствовать этому устройству?".