2014-11-17 7 views
2

Я разрабатываю приложение для Android, которое будет работать с растровыми изображениями, и я ищу надежный способ получить максимальный размер текстуры для OpenGL на разных устройствах.
Я знаю минимальный размер = 2048x2048, но это не очень хорошо, поскольку там уже есть таблетки с гораздо более высоким разрешением (например, 2560x1600)
Так есть ли надежный способ получить эту информацию?

До сих пор я пытался:
Получить максимальный размер текстуры OpenGL

  • Canvas.getMaximumBitmapWidth() (возвращает 32766 вместо 2048)
  • GLES10.glGetIntegerv (GL10.GL_MAX_TEXTURE_SIZE ...) (возврат 0)

Я работаю с минимальной-= 15 SDK (ICS) и я проверяю его на Asus Transformer TF700T Инфинити

кто-нибудь знает другой способ, чтобы получить его? Или мне нужно будет скомпилировать список известных графических процессоров с их максимальным размером холста?

+1

У вас есть действительный контекст gl, когда вы называете это 'glGetIntegerv()'? – derhass

ответ

2

попытка использовать этот код

int[] maxTextureSize = new int[1]; 
GLES10.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxTextureSize, 0); 

maxTextureSize хранит предельный размер для декодированного изображения, таких как 4096x4096, 8192x8192. Не забудьте запустить этот фрагмент кода в MainThread или вы получите нуль.

+0

всегда получил 0 ... –

+0

Даже если вы находитесь в MainThread, вы можете придумать 'E/libEGL: вызов OpenGL ES API без текущего контекста (зарегистрированный один раз для потока)' и получить результат 0. – Weekend

1

Это даст вам максимальную разрешенную высоту.

Canvas canvas = new Canvas(); 
canvas.getMaximumBitmapHeight()/8 
+0

Но только если вы находитесь в режиме просмотра, который рисуется. В противном случае вы получите постоянное значение. –

+0

Зачем вам делиться на 8? (Работы, но мне любопытно) – AndroidRuntimeException

+0

Это неправда. 'getMaximumBitmap (Height | Width)()' на программном рендере canvas возвращает значение [постоянное значение] (https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r21/graphics/java/ android/graphics/Canvas.java # 293), а аппаратное ускорение холста возвращает [real] (https://groups.google.com/d/msg/android-developers/UFjDiBUfY78/v0XWoBlkvR8J) 'GL_MAX_TEXTURE_SIZE'. Я тестировал его на нескольких устройствах. Разделение на 8 - просто совпадение. – Weekend

Смежные вопросы