Obtener el máximo límite de tamaño de textura de OpenGL ES 2.0 en Android

Estoy tratando de obtener el máximo límite de tamaño de textura en Android para OpenGL 2.0. Pero he encontrado que la siguiente instrucción sólo funciona si estoy actualmente dentro del contexto OpenGL, en otras palabras, debo tener una superficie GL y un procesador GL, etc, que no quiero.

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

Así que vine con el siguiente algoritmo, que me da el tamaño máximo de textura sin tener que crear ninguna superficie o renderizador. Funciona correctamente, así que mi pregunta es si esto funcionará con todos los dispositivos Android, y si alguien puede detectar cualquier error, por si acaso.

 public int getMaximumTextureSize() { EGL10 egl = (EGL10)EGLContext.getEGL(); EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); // Initialise int[] version = new int[2]; egl.eglInitialize(display, version); // Query total number of configurations int[] totalConfigurations = new int[1]; egl.eglGetConfigs(display, null, 0, totalConfigurations); // Query actual list configurations EGLConfig[] configurationsList = new EGLConfig[totalConfigurations[0]]; egl.eglGetConfigs(display, configurationsList, totalConfigurations[0], totalConfigurations); int[] textureSize = new int[1]; int maximumTextureSize = 0; // Iterate through all the configurations to located the maximum texture size for (int i = 0; i < totalConfigurations[0]; i++) { // Only need to check for width since opengl textures are always squared egl.eglGetConfigAttrib(display, configurationsList[i], EGL10.EGL_MAX_PBUFFER_WIDTH, textureSize); // Keep track of the maximum texture size if (maximumTextureSize < textureSize[0]) { maximumTextureSize = textureSize[0]; } Log.i("GLHelper", Integer.toString(textureSize[0])); } // Release egl.eglTerminate(display); Log.i("GLHelper", "Maximum GL texture size: " + Integer.toString(maximumTextureSize)); return maximumTextureSize; } 

Por desgracia, el tamaño máximo de PBUFFER no está relacionado con el tamaño máximo de la textura (pero puede ser el mismo).

Creo que la mejor manera de obtener el tamaño de textura máximo es crear un contexto de GL (en el mismo contexto que uno en el que Ud. Realmente usará estas texturas) y pedir GL_MAX_TEXTURE_SIZE.

Hay una razón fuerte detrás de esto: el conductor del ogl no se inicializa para el proceso actual antes de la creación de la superficie (y del contexto). Algunos controladores realizan la detección subyacente de HW / SKU en la inicialización y calculan los tamaños máximos de superficie dependiendo de las capacidades de HW.

Además, se permite que el tamaño de textura máximo varíe dependiendo del contexto (y se creó el contexto EGLConfig).

Y una cosa más: eglGetConfigs obtendrá todos los EGLconfigs, incluso estos por defecto, el software renderizador android, o theese del controlador OpenGL ES 1.1CM HW (si hay controladores independientes para 1.1 y 2.0 en la plataforma de destino). Los controladores son independientes en la pila de gráficos y pueden devolver diferentes max-es.

  • Mapeando una textura en un cuadrado: ¿Por qué se rota la imagen?
  • Android OpenGL texturas se ven terrible en Sprint Samsung Galaxy s2 Epic Touch 4g
  • Consejos para mejorar la tasa de llenado de OpenGL ES en Android
  • Opengl ES 1.1 / Android - La debacle de la textura-mapeo-a-uno-cuadrado de 2011
  • Rendimiento lento de glTexSubImage2D en Nexus 10 / Android 4.2.2 (Samsung Exynos 5 con Mali-T604)
  • Combinación Android de OpenGL de SurfaceTexture (imagen externa) y textura ordinaria
  • ¿Cómo escalar sprites en libgdx según las resoluciones de pantalla?
  • Procesamiento de texto Android OpenGL ES 2.0
  • Tamaño de textura mínimo requerido para el cumplimiento con OpenGL-ES 2.0 en Android?
  • Carga rápida de texturas en OpenGL 2.0
  • ¿Puede OpenGL ES renderizar texturas de dimensiones no básicas 2?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.