2011-12-20 17 views
5

Me gustaría saber si existe algún tipo de limitación en el tamaño de la textura que pueda usarse en cualquier proyecto de Android OpenGL Es 2.0. Entiendo que tener una gran textura de tamaño 4096x4096 significa un poco menos ya que se representa en una pantalla pequeña. Pero, ¿y si el requisito es cambiar entre muchas texturas en tiempo de ejecución? Y si quiero tener un atlas de textura para hacer una carga única rápida en lugar de cargar varias texturas más pequeñas. Por favor, háganme saber sus ideas a este respecto.¿Limitación en el tamaño de la textura? Android Open GL ES 2.0

También estoy seguro de que tiene que haber una limitación en el tamaño de la imagen que puede ser procesada por un dispositivo, ya que la memoria en el dispositivo es limitada. Pero me gustaría saber si se basa en la resolución o si se basa en el tamaño. Quiero decir, si un dispositivo tiene una limitación de tamaño de imagen de 1024x1024, puede manejar una textura comprimida de tamaño 2048x2048 que sería del mismo tamaño aproximadamente que 1024x1024 sin comprimir.

También, por favor, hágamelo saber de forma general por cuánto la limitación en el tamaño de la textura o la resolución de los dispositivos normales que ejecutan Android 2.2 y superior sería.

También avíseme si hay algunas prácticas recomendadas al manejar imágenes de alta resolución en opengles 2.0 para obtener el mejor rendimiento tanto en tiempo de carga como de tiempo de ejecución.

Respuesta

21

Existe una limitación de hardware en los tamaños de textura. Para buscarlos manualmente, puede ir a un sitio como glbenchmark.com (Aquí se muestran detalles sobre google galaxy nexus).
permite encontrar automáticamente el tamaño máximo de su código, puede usar algo como:

int[] max = new int[1]; 
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, max, 0); //put the maximum texture size in the array. 

(Para GL10, pero existe el mismo método para GLES20)

Cuando se trata de la transformación o edición de una imagen que normalmente utiliza una instancia de Bitmap al trabajar en Android. Esto contiene los valores no comprimidos de su imagen y, por lo tanto, depende de la resolución. Sin embargo, es recommended que utiliza texturas comprimidas para sus aplicaciones OpenGL ya que esto mejora la eficiencia de uso de la memoria (tenga en cuenta que no puede modificar estas texturas comprimidas).
Desde el previous link:

compresión de texturas puede aumentar significativamente el rendimiento de la aplicación OpenGL mediante la reducción de los requisitos de memoria y haciendo más uso eficiente del ancho de banda de memoria. El marco de Android proporciona soporte para el formato de compresión etc1 como una característica estándar [...]

Usted debe echar un vistazo a this document que contiene muchas buenas prácticas y consejos acerca de la textura de la carga y su uso. El autor escribe explícitamente:

Práctica recomendada: utilice ETC para la compresión de la textura.

Práctica recomendada: asegúrese de que la geometría y la resolución de la textura sean adecuadas para el tamaño en el que se muestran. No utilice una textura de 1k x 1k para algo que tenga como máximo 500 píxeles de ancho en la pantalla. El mismo para la geometría.

Cuestiones relacionadas