Как определить пределы текстурной памяти для устройства Android в коде? - PullRequest
2 голосов
/ 23 марта 2012

Вот ситуация: у меня есть два изображения, ширина которых превышает 1024, и которые в конечном итоге масштабируются до 2048 как степень 2. Это прекрасно работает практически на всех протестированных устройствах Android, за исключением HTC Eris и HTC Hero, которые не работают и отображают только пустой белый прямоугольник.

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

Я нашел несколько похожих вопросов в Интернете, но ни один из них не дал ответа, как это сделать.

Решение (согласно ответу Тима):

Мне удалось захватить эту информацию в методе onSurfaceCreated() моего класса GLSurfaceView.Renderer, а затем проверить его:

public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
    IntBuffer textureLimit = IntBuffer.allocate(1);
    gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, textureLimit);
    this.mTextureLimit = textureLimit.get(0);
}

1 Ответ

2 голосов
/ 23 марта 2012

Вы изучили семейство функций glGet *? Вы можете запросить все виды параметров о текущей реализации gles.

Может быть, что-то вроде glGetIntegerv(GL_MAX_TEXTURE_SIZE, size); подойдет.

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml

Также вы можете использовать glGetError для проверки ошибок. Если вы попытаетесь создать текстуру, которая слишком велика для реализации, она должна вернуть GL_INVALID_VALUE после вызова glTexImage2d. Вы можете уловить эту ошибку после создания текстуры и возврата к меньшему размеру, если по какой-то причине большая текстура не была успешно создана.

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