Aceleración de hardware

Puede usar la aceleración de hardware OpenGL ES 1.1 para mejorar el rendimiento de los gráficos en determinadas aplicaciones. Los juegos y otras aplicaciones en los que se visualicen objetos animados también pueden aprovechar la aceleración de hardware. Las aplicaciones que usan aceleración de hardware liberan a la CPU de cierta carga de procesamiento gráfico y la transfieren a la GPU del iPhone, con lo que el rendimiento aumenta considerablemente.

Cuando se diseña una aplicación para usar la GPU, es importante seguir reglas que garanticen que el contenido se acelerará en la GPU de forma eficaz.

Para usar la aceleración de hardware, establezca Procesamiento en GPU en la ficha General del cuadro de diálogo Configuración de iPhone en Flash Professional CS5. También puede establecer la propiedad renderMode como gpu en el archivo descriptor de la aplicación:

<initialWindow> 
    <renderMode>gpu</renderMode> 
    ...

Consulte Configuración de propiedades de la aplicación para iPhone en Flash Professional CS5 y Configuración de propiedades de la aplicación para iPhone en el archivo descriptor de la aplicación .

Existen cuatro clases de objetos de visualización que pueden procesarse rápidamente en aceleración de hardware si su contenido no cambia con mucha frecuencia:

  • Objetos de mapa de bits

  • Objetos de visualización 2D para los que la propiedad cacheAsBitmap se establece como true y, opcionalmente, tienen su propiedad cacheAsBitmapMatrix configurada (ver más abajo)

  • Objetos de visualización 3D (es decir, que tienen definida su propiedad z )

  • Objetos de visualización que tienen relleno rectangular de un solo color sólido y bordes que se alinean con los píxeles de la pantalla.

Los objetos basados en vectores vuelven a procesarse cada vez que otro elemento Sprite se anima por encima o por debajo. Así, cualquier objeto que sirva de fondo o relleno de primer plano para una animación también debe pertenecer a una de estas categorías.

Para los objetos de visualización con cacheAsBitmap establecido en true , el ajuste cacheAsBitmapMatrix hace que la GPU utilice el mapa de bits resultante de la transformación matricial. La GPU utiliza la representación de mapa de bits incluso si el objeto se gira o cambia de escala. La GPU puede componer y animar este mapa de bits en menos tiempo del que tardaría la CPU en redibujar un objeto procesado como vector.

Definir solamente cacheAsBitmap como true hace que el objeto de visualización (y cualquiera de sus objetos secundarios) se guarde en caché. El objeto de visualización no se redibuja si se exponen nuevas regiones o si se traslada todo el gráfico combinado.

Cuando la propiedad cacheAsBitmapMatrix de un objeto de visualización se establece, la aplicación puede crear una representación del objeto de visualización incluso cuando no está visible. La aplicación crea una representación en caché del objeto de visualización en el inicio del siguiente fotograma. Seguidamente, al añadir el objeto de visualización al escenario, la aplicación lo procesa rápidamente. Asimismo, la aplicación puede animar el objeto rápidamente para girarlo o escalarlo. Para objetos que giran o cambian de escala, no establezca la propiedad cacheAsBitmap si no ha establecido también la propiedad cacheAsBitmapMatrix .

La aplicación también puede llevar a cabo rápidamente transformaciones alfa en un objeto guardado en caché como mapa de bits. No obstante, sólo se admiten los valores alpha entre 0 y 1.0 para transformaciones alfa con aceleración de hardware. Esto corresponde a un ajuste de colorTransform.alphaMultiplier entre 0 y 256.

No establezca la propiedad cacheAsBitmap en true para objetos que se actualicen frecuentemente, como campos de texto.

Los objetos de visualización que contienen contenido gráfico que cambia con frecuencia suelen ser mala opción para el procesamiento de GPU. Esto resulta especialmente cierto en dispositivos antiguos con GPU mucho menos potente. La sobrecarga de cargar los gráficos en la GPU puede convertir el procesamiento de CPU en una mejor opción.

Reestructure los objetos de visualización con objetos secundarios que se desplacen con relación al objeto de visualización principal. Cámbielos de modo que los objetos de visualización secundarios se conviertan en objetos homólogos de la clase principal. Esto garantizará que cada uno tenga su propia representación de mapa de bits. Asimismo, cada objeto de visualización podrá desplazarse con relación a los otros sin necesidad de cargar nuevos gráficos en la GPU.

Establezca la propiedad cacheAsBitmap como true en el máximo nivel de la lista de visualización en la que los objetos de visualización secundarios no se animan. Dicho de otro modo, establezca la propiedad para que muestre contenedores de objetos con partes fijas. No lo haga en los objetos de visualización secundarios. NO establezca la propiedad en sprites que contengan otros objetos animados.

Si establece la propiedad z de un objeto de visualización, la aplicación siempre utilizará una representación de mapa de bits guardada en caché. Asimismo, una vez establecida la propiedad z para un objeto de visualización, la aplicación utiliza la representación de mapa de bits guardad en caché incluso si gira o escala el objeto. La aplicación no utiliza la propiedad cacheAsBitmapMatrix para objetos de visualización con una propiedad z establecida. La misma regla se aplica cuando se define cualquier propiedad de objetos de visualización tridimensionales, incluidas las propiedades rotationX , rotationY , rotationZ y transform.matrix3D .

No establezca la propiedad scrollRect o mask de un contenedor de objeto de visualización con contenido para el que quiera utilizar aceleración de hardware. Si establece estas propiedades, deshabilitará la aceleración de hardware para el contenedor del objeto de visualización y sus objetos secundarios. Una alternativa a ajustar la propiedad mask es colocar un objeto de visualización de máscara sobre el objeto de visualización que se esté enmascarando.

Existen límites asociados al tamaño de los objetos de visualización disponibles en la aceleración de hardware. En dispositivos antiguos, el límite es 1.024 píxeles o menos tanto en la anchura como en la altura. En dispositivos nuevos, el límite es 2.048 píxeles o menos. Puede utilizar la herramienta de diagnóstico de procesamiento de GPU para probar el rendimiento en un dispositivo.

La GPU también utiliza la RAM del iPhone para guardar imágenes de mapa de bits. Utiliza al menos la misma memoria necesaria para las imágenes de mapa de bits.

La GPU utiliza asignaciones de memoria que son potencias de 2 para cada cota de la imagen de mapa de bits. Por ejemplo, la GPU puede reservar memoria en tamaños de 512x1.024 ó 8x32. Así, una imagen de 9x15 píxeles utiliza la misma cantidad de memoria que una imagen de 16x16 píxeles. En el caso de los objetos de visualización en caché, lo normal es usar las dimensiones más próximas a potencias de 2 (pero sin superarlas) en cada dirección. Por ejemplo, es más eficaz utilizar un objeto de visualización de 32x16 píxeles que uno de 33x17 píxeles.

No se base en un objeto Stage redimensionado para reducir la escala de archivos cambiados de tamaño para otras plataformas (por ejemplo, el escritorio). Mejor utilice la propiedad cacheAsBitmapMatrix o cambie de tamaño los activos antes de publicar para el iPhone. Los objetos 3D omiten la propiedad cacheAsBitmapMatrix cuando guardan en caché una imagen superficial. Por este motivo, es mejor cambiar de tamaño los objetos de visualización antes de publicarlos si se van a representar en una superficie 3D.

Se trata de un equilibrio entre las ventajas de la aceleración de hardware y el uso de la RAM. A medida que la memoria se llena, iPhone OS lo notifica a otras aplicaciones nativas para iPhone en ejecución para liberar memoria. Cuando estas aplicaciones procesan la notificación y trabajan para liberar memoria, tal vez compitan con la aplicación en los ciclos de la CPU. Esto puede reducir momentáneamente el rendimiento de la aplicación. Es importante probar la aplicación en dispositivos más antiguos, ya que suelen tener mucha menos memoria disponible para el proceso en ejecución.

Durante la depuración de la aplicación en el iPhone, puede activar la función de diagnóstico de procesamiento de GPU. Esta función ayuda a ver cómo utiliza la aplicación el procesamiento de GPU. Para obtener más información, consulte “Depuración con diagnóstico de procesamiento de GPU” en Depuración de una aplicación para iPhone .

Para obtener más información sobre el uso de la propiedad cacheAsBitmapMatrix , consulte la sección “DisplayObject.cacheAsBitmapMatrix” de API de ActionScript específicas de aplicaciones de AIR móviles .