2012-02-13 10 views
13

Escribo un juego mixto 2D/3D en Android y no puedo determinar la cantidad de memoria de textura que puedo usar. ¿Hay alguna manera de determinar la memoria de textura máxima en OpenGL ES?Cómo determinar la memoria de textura máxima en Android OpenGL ES

Tengo mi propio caché de texturas y quiero saber el umbral máximo de memoria de texturas. Estoy haciendo una estimación aproximada usando activityManager.getMemoryInfo(mi), pero en algunos dispositivos cuando trato de asignar textura (y muchos más ya están en la memoria) la aplicación falla (EGL_BAD_ALLOC). Cuando configuro este umbral a un valor inferior, todo parece estar bien. ¿Alguien tiene alguna idea? O, finalmente, cómo determinar que la asignación de texturas no tuvo éxito, en lugar de fallar.

Respuesta

4

Parece que está intentando conocer la cantidad de VRAM (RAM de video) disponible. The question has already been partially answered.

Sin embargo, la cantidad de VRAM no determina la cantidad de texturas se ajuste en ella: estos pueden ser comprimidos, la cantidad de RAM de vídeo puede cambiar debido a otra aplicación, y no sabemos la cantidad de memoria del el controlador de video usa.

Método 1

From this topic, se puede obtener la cantidad máxima de unidades de textura; eso significa que el número máximo que se puede unir al mismo tiempo:

int[] maxSize = new int[1]; 
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxSize, 0); 

And from this other one, puede recuperar el tamaño máximo de textura:

int[] maxNum = new int[1]; 
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, maxNum, 0); 

Así que, lógicamente, puede al menos aptos maxSize[0] ² × maxNum[0] píxeles en la VRAM sin problemas. Incluso si el VRAM se queda sin espacio, el controlador de gráficos lo administrará para nosotros (que puede incluir un bloqueo de la aplicación en caso de inanición).

De todos modos, probablemente no ajustará el tamaño de las texturas en función de la cantidad de VRAM o los píxeles disponibles; es posible pero no rentable, portátil y es difícil de implementar correctamente. Hay una manera mejor manera de hacer esto:

Método 2

99% de las veces, la cantidad que de VRAM en el chip gráfico es proporcional al tamaño de la pantalla. Por lo tanto, use the screen's DPI (ldpi, mdpi, hdpi, xhdpi) para determinar qué versión (tamaño) de la textura cargar (experimentar con diferentes dispositivos (reales)), por lo que está seguro sobre el "¿cabe en ese dispositivo?".

Cuestiones relacionadas