Accélération matérielle

L’accélération matérielle OpenGL ES 1.1 permet d’améliorer les performances graphiques de certaines applications. L’accélération matérielle s’avère souvent un atout pour les jeux et autres applications dans lesquelles les objets d’affichage sont animés. Les applications qui font appel à l’accélération matérielle peuvent confier certains processus graphiques incombant normalement à l’unité centrale au processeur graphique de l’iPhone, d’où une amélioration considérable des performances.

Lorsque vous configurez une application de façon à ce qu’elle utilise le processeur graphique, vous devez suivre certaines règles pour vous assurer que l’accélération matérielle du contenu est correctement effectuée via le processeur graphique.

Pour utiliser l’accélération matérielle, définissez l’option Rendu sur GPU dans l’onglet Général de la boîte de dialogue Paramètres de l’iPhone de Flash Professional CS5. Vous pouvez également définir la propriété renderMode sur gpu dans le fichier descripteur d’application :

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

Voir Définition des propriétés d’une application iPhone dans Flash Professional CS5 et Définition des propriétés d’une application iPhone dans le fichier descripteur correspondant .

Il existe quatre classes d’objets d’affichage pouvant être rendus rapidement via l’accélération matérielle si leur contenu ne change pas fréquemment :

  • Objets Bitmap

  • Objets d’affichage 2D dont la propriété cacheAsBitmap est définie sur true et dont la propriété cacheAsBitmapMatrix peut ou non être définie (voir ci-dessous)

  • Objets d’affichage 3D (dont la propriété z est définie)

  • Objets d’affichage qui possèdent un remplissage rectangulaire uni dont les bords sont alignés sur les pixels à l’écran.

Le rendu des objets vectoriels est actualisé lorsqu’un autre sprite est animé au-dessus ou au-dessous d’eux. Par conséquent, tout objet servant de toile de fond ou de premier plan à une animation devrait également appartenir à l’une de ces catégories.

Pour les objets d’affichage dont la propriété cacheAsBitmap est définie sur true , définir cacheAsBitmapMatrix force le processeur graphique à utiliser le bitmap résultant de la transformation matricielle. Le processeur graphique utilise la représentation sous forme de bitmap même si l’objet subit une rotation ou une mise à l’échelle. Il peut en effet composer et animer ce bitmap considérablement plus rapidement que l’unité centrale ne peut actualiser l’affichage d’un objet au rendu vectoriel.

Si vous définissez la propriété cacheAsBitmap sur true , l’objet d’affichage (et tous ses enfants) est mis en cache. L’objet d’affichage n’est pas redessiné lorsque de nouvelles régions sont exposées ou lorsque l’intégralité de l’image combinée est translatée.

Lorsque la propriété cacheAsBitmapMatrix d’un objet d’affichage est définie, l’application peut représenter ce dernier même s’il n’est pas visible. L’application crée une représentation en mémoire cache de l’objet d’affichage au début de l’image suivante. Lorsque vous ajoutez ensuite l’objet d’affichage à la scène, l’application effectue rapidement son rendu. L’application peut également animer, faire pivoter ou mettre à l’échelle rapidement l’objet. Pour les objets qui pivotent ou se mettent à l’échelle, ne définissez pas la propriété cacheAsBitmap sans définir également la propriété cacheAsBitmapMatrix .

Par ailleurs, l’application peut rapidement effectuer des transformations alpha sur un objet mis en cache sous forme de bitmap. Toutefois, seules les valeurs alpha comprises entre 0 et 1.0 sont prises en charge pour les transformations alpha effectuées par accélération matérielle. Cela correspond à un paramètre colorTransform.alphaMultiplier compris entre 0 et 256.

Ne définissez pas la propriété cacheAsBitmap sur true pour les objets fréquemment mis à jour, tels que les champs de texte.

Les objets d’affichage dont le contenu graphique change fréquemment ne conviennent généralement pas au rendu sur GPU. C’est notamment le cas sur les anciens périphériques dotés de processeurs graphiques moins puissants. Il est donc plus judicieux d’opter pour un rendu basé sur l’unité centrale plutôt que d’avoir à charger les images sur le processeur graphique.

Restructurez les objets d’affichage qui contiennent des objets d’affichage enfants qui se déplacent en fonction d’un objet parent. Modifiez-les de sorte que les objets d’affichage enfants deviennent enfants de l’objet parent. Vous vous assurez ainsi que chacun d’eux dispose de sa propre représentation sous forme de bitmap. Par ailleurs, chaque objet d’affichage sera capable de se déplacer par rapport aux autres sans avoir à charger de nouvelles images sur le processeur graphique.

Définissez la propriété cacheAsBitmap sur true au niveau le plus élevé de la liste d’affichage où les objets d’affichage enfant ne sont pas animés. En d’autres termes, définissez cette propriété pour les conteneurs d’objets d’affichage qui ne comportent pas d’éléments animés. Ne la définissez pas pour les objets d’affichage enfant. Evitez également de la définir pour les sprites qui contiennent d’autres objets d’affichage animés.

Lorsque vous définissez la propriété z d’un objet d’affichage, l’application utilise toujours une représentation bitmap en mémoire cache. Par ailleurs, une fois la propriété z d’un objet d’affichage définie, l’application fait appel à la représentation bitmap en mémoire cache, même si vous faites pivoter ou mettez à l’échelle l’objet. L’application n’utilise pas la propriété cacheAsBitmapMatrix pour les objets d’affichage dont la propriété z est définie. Les mêmes règles s’appliquent lorsque vous définissez les propriétés de tout objet d’affichage en trois dimensions, notamment les propriétés rotationX , rotationY , rotationZ et transform.matrix3D .

Ne définissez pas la propriété scrollRect ou mask d’un conteneur d’objet d’affichage qui comporte un contenu pour lequel vous souhaitez utiliser l’accélération matérielle. En définissant ces propriétés, vous désactivez en effet l’accélération matérielle pour le conteneur d’objet d’affichage et ses objets enfant. Au lieu de définir la propriété mask , superposez un objet d’affichage de masque à l’objet d’affichage que vous souhaitez masquer.

La taille des objets d’affichage disponibles pour l’accélération matérielle est limitée. Sur les anciens périphériques, la taille maximale est de 1 024 pixels ou moins en largeur et en hauteur. Sur les périphériques plus récents, la limite est de 2 048 pixels. Pour pouvez utiliser l’outil de diagnostic du rendu sur GPU pour tester les performances sur un périphérique.

Le processeur graphique mémorise également des images bitmap dans la RAM de l’iPhone. Il sollicite au moins autant de mémoire que la quantité requise par les images bitmap.

Le processeur graphique fait appel aux allocations de mémoire exprimées sous la forme de valeurs à la puissance 2 pour chaque dimension de l’image bitmap. Il peut par exemple réserver de la mémoire de taille 512 x 1 024 ou 8 x 32. Une image de 9 x 15 pixels consomme ainsi autant de mémoire qu’une image de 16 x 16 pixels. Pour les objets d’affichage mis en cache, vous pouvez utiliser les dimensions proches des puissances de 2 (mais pas au-delà) dans chaque direction. Il est ainsi plus efficace d’utiliser un objet d’affichage de 32 x 16-pixels qu’un objet d’affichage de 33 x 17 pixels.

Ne comptez pas sur le redimensionnement de la scène pour réduire la taille des actifs dimensionnés pour d’autres plates-formes (le bureau, par exemple). Faites de préférence appel à la propriété cacheAsBitmapMatrix ou redimensionnez les actifs avant la publication de l’application l’iPhone. Les objets 3D ignorent la propriété cacheAsBitmapMatrix lors de la mise en mémoire cache d’une image de surface. C’est pourquoi il est préférable de redimensionner les objets d’affichage avant la publication de l’application s’ils sont appelés à être rendus sur une surface 3D.

Il est nécessaire de parvenir à un juste équilibre entre les avantages de l’accélération matérielle et l’utilisation de la RAM. Au fur et à mesure que la mémoire se remplit, iPhone OS demande à d’autres applications iPhone natives en cours d’exécution de libérer de la mémoire. Lorsque les applications traitent cette notification et libèrent de la mémoire, elles risquent de rivaliser avec votre application pour disposer de cycles de l’unité centrale. Les performances de l’application risquent alors de se dégrader temporairement. Veillez à tester l’application sur des périphériques plus anciens, susceptibles de consacrer considérablement moins de mémoire au processus en cours d’exécution.

Lors du débogage de l’application sur l’iPhone, il est possible d’activer la fonction de diagnostic du rendu sur GPU. Cette fonction vous aide à comprendre comment votre application utilise le rendu sur GPU. Pour plus d’informations, voir la rubrique « Débogage avec l’outil de diagnostic du rendu sur GPU » à la section Débogage d’une application iPhone .

Pour plus d’informations sur l’utilisation de la propriété cacheAsBitmapMatrix , voir la section « DisplayObject.cacheAsBitmapMatrix » d’ API d’ActionScript propres aux applications AIR mobiles .