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.
- Cargando texturas grandes en AndEngine
- Cómo llenar cada lado de un cubo con texturas diferentes en OpenGL ES 1.1?
- libgdx spritebatch no dibuja basado en el origen de una textura
- Texturas que sólo se muestran en algunos dispositivos
- Compresión de textura de Android OpenGL
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; }
- ¿Hay algún punto en el uso de un búfer de índice con una textura en OpenGL ES (Android)?
- Limitación del tamaño de la textura? Android Open GL ES 2.0
- Problema de opengl de Android (extraño)
- Gestión de activos entre la versión de escritorio y de dispositivo en libgdx
- Android OpenGL2.0 que muestra texturas negras
- Andengine problema de textura extraña
- ¿Para qué se utiliza Android TextUtils?
- Cómo dibujar una imagen de fondo grande con libgdx - las mejores prácticas?
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.
- ¿Qué son las aplicaciones com.sec.android.provider. * Exactamente?
- Cómo comprobar si la actividad se inicia desde la notificación