Accelerazione hardware

Potete utilizzare l'accelerazione hardware OpenGL ES 1.1 per migliorare le prestazioni grafiche in alcune applicazioni. Giochi e altre applicazioni in cui oggetti di visualizzazione sono animati possono trarre vantaggio dall'accelerazione hardware. Le applicazioni che utilizzano l'accelerazione hardware possono trasferire alcuni processi grafici dalla CPU alla GPU dell'iPhone, con considerevole miglioramento delle prestazioni.

Quando si progetta un applicazione per utilizzare GPU è importante seguire le regole che garantiscono che il contenuto sia effettivamente accelerato GPU.

Per utilizzare l'accelerazione hardware, impostate il Rendering su GPU nella scheda Generali della finestra di dialogo Impostazioni iPhone in Flash Professional CS5. Potete anche impostare la proprietà renderMode su gpu nel file descrittore dell'applicazione:

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

Vedete Impostazione delle proprietà dell'applicazione iPhone in Flash Professional CS5 e Impostazione delle proprietà dell'applicazione iPhone nel file descrittore dell'applicazione .

Esistono quattro classi di oggetti di visualizzazione che possono eseguire rapidamente il rendering nell'accelerazione hardware se il loro contenuto cambia raramente:

  • Oggetti bitmap

  • Oggetti di visualizzazione 2D per i quali la proprietà cacheAsBitmap è impostata su true e la cui proprietà è facoltativamente impostata su cacheAsBitmapMatrix (vedete di seguito)

  • Oggetti di visualizzazione 3D (ovvero, la cui proprietà z è impostata)

  • Oggetti di visualizzazione dotati di un singolo riempimento rettangolare a tinta unita e bordi che si allineano con i pixel sullo schermo.

Gli oggetti vettoriali vengono nuovamente sottoposti a rendering ogni volta che un altro sprite si anima sopra o sotto di essi. Pertanto, qualsiasi oggetto che serve come sfondo o primo piano a un'animazione deve anche appartenere a una di queste categorie.

Per gli oggetti di visualizzazione per i quali la proprietà cacheAsBitmap è impostata su true , l'impostazione cacheAsBitmapMatrix determina l'utilizzo della bitmap che deriva dalla trasformazione della matrice. La GPU utilizza la rappresentazione bitmap anche se l'oggetto viene ruotato o ridimensionato. La GPU può creare e animare questa bitmap molto più rapidamente di quanto la CPU non possa ridisegnare un oggetto riprodotto vettorialmente.

La sola impostazione di cacheAsBitmap su true causa la memorizzazione nella cache di un oggetto di visualizzazione (e di eventuali elementi secondari). L'oggetto di visualizzazione non viene ridisegnato quando le nuove regioni vengono esposte o quando l'intero grafico combinato viene tradotto.

Quando la proprietà cacheAsBitmapMatrix dell'oggetto di visualizzazione è impostata, l'applicazione può creare una rappresentazione dell'oggetto di visualizzazione anche quando questo non è visibile. L'applicazione crea una rappresentazione memorizzata nella cache dell'oggetto di visualizzazione all'inizio del fotogramma successivo. Quando poi aggiungete l'oggetto di visualizzazione allo stage, l'applicazione effettua rapidamente il rendering. Inoltre, l'applicazione può rapidamente animare, ruotare o ridimensionare l'oggetto. Per oggetti che vengono ruotati o ridimensionati, non impostate la proprietà cacheAsBitmap senza impostare anche la proprietà cacheAsBitmapMatrix .

L'applicazione può anche eseguire rapidamente trasformazioni alfa su un oggetto memorizzato nella cache come una bitmap. Tuttavia, solo i valori alpha compresi tra 0 e 1.0 sono supportati per le trasformazioni alfa accelerate via hardware. Questo corrisponde a un'impostazione colorTransform.alphaMultiplier compresa tra 0 e 256.

Non impostate la proprietà cacheAsBitmap su true per oggetti aggiornati frequentemente, ad esempio i campi di testo.

Gli oggetti di visualizzazione il cui contenuto grafico viene aggiornato spesso sono in genere candidati non ideali per il rendering GPU, in particolare su dispositivi non recenti dotati di GPU meno potenti. L'overhead del caricamento di grafica nella GPU può consigliare l'utilizzo del rendering CPU.

Ristrutturate gli oggetti di visualizzazione contenenti oggetti di visualizzazione secondari che si spostano rispetto a quello principale. Modificateli in modo che gli oggetti di visualizzazione secondari diventino parenti di quello principale. Questo garantisce che ciascuno abbia la propria rappresentazione bitmap. Inoltre, ogni oggetto di visualizzazione sarà in grado di muoversi in relazione agli altri senza che sia necessario caricare nuova grafica nella GPU.

Impostate la proprietà cacheAsBitmap su true al livello più alto dell'elenco di visualizzazione dove gli oggetti di visualizzazione secondari non si animano. In altre parole, impostatela per contenitori oggetti di visualizzazione che non contengono parti in movimento. Non impostatela sugli oggetti di visualizzazione subordinati. Non impostatala per sprite contenenti altri oggetti di visualizzazione che si animano.

Quando impostate la proprietà z di un oggetto di visualizzazione, l'applicazione utilizza sempre una rappresentazione bitmap memorizzata nella cache. Inoltre, dopo che avete impostato la proprietà z di un oggetto di visualizzazione, l'applicazione utilizza la rappresentazione bitmap memorizzata nella cache, anche se ruotate o ridimensionate l'oggetto. L'applicazione non utilizza la proprietà cacheAsBitmapMatrix per oggetti di visualizzazione la cui proprietà z è impostata. Le stesse regole sono valide quando impostate le proprietà di qualsiasi oggetto di visualizzazione tridimensionale, comprese le proprietà rotationX , rotationY , rotationZ e transform.matrix3D .

Non impostate la proprietà scrollRect o mask di un contenitore di oggetti di visualizzazione per il quale desiderate utilizzare l'accelerazione hardware. L'impostazione di queste proprietà disabilita l'accelerazione hardware per il contenitore oggetti di visualizzazione e i suoi oggetti secondari. In alternativa all'impostazione della proprietà mask , stratificate un oggetto di visualizzazione utilizzato come maschera sull'oggetto di visualizzazione che viene mascherato.

Esistono dei limiti alle dimensioni degli oggetti di visualizzazione disponibili per l'accelerazione hardware. Nei dispositivi meno recenti, il limite è al massimo 1024 pixel per la larghezza e l'altezza. Nei dispositivi più recenti, il limite è al massimo 2048 pixel. Potete utilizzare lo strumento di diagnostica del rendering GPU per provare le prestazioni su un dispositivo.

La GPU utilizza anche la RAM dell'iPhone per archiviare immagini bitmap. Viene utilizzata la quantità di memoria minima necessaria per le immagini bitmap.

La GPU utilizza allocazioni di memoria che sono potenze di 2 per ogni dimensione dell'immagine bitmap. Ad esempio, la GPU può riservare memoria in dimensioni di 512 x 1024 o 8 x 32. Pertanto un'immagine di 9 x 15 pixel richiede la stessa quantità di memoria di un'immagine di 16 x 16 pixel. Per oggetti di visualizzazione memorizzati nella cache, potete utilizzare le dimensioni più vicine alla potenza di 2 (ma non superiori) in ogni direzione. Ad esempio, è più efficiente utilizzare un oggetto di visualizzazione da 32 x 16 pixel anziché uno da 33 x 17 pixel.

Non basatevi su uno Stage ridimensionato per ridurre in scala risorse che sono state dimensionate per altre piattaforme (ad esempio, il desktop). Piuttosto, utilizzate la proprietà cacheAsBitmapMatrix , oppure ridimensionate le risorse prima della pubblicazione per l'iPhone. Gli oggetti 3D ignorano la proprietà cacheAsBitmapMatrix quando si esegue la memorizzazione nella cache di un'immagine superficie. Per questo motivo, è meglio ridimensionare gli oggetti di visualizzazione prima della pubblicazione se non ne verrà eseguito il rendering su un superficie 3D.

Esiste un compromesso tra i vantaggi dell'accelerazione hardware e l'utilizzo della RAM. Man mano che la memoria si riempie, il sistema operativo dell'iPhone segnala ad altre applicazioni iPhone native in esecuzione di liberare memoria. Poiché le applicazioni elaborano questa notifica e operano per liberare memoria, è possibile che entrino in competizione con l'applicazione per le risorse di CPU. Questo può causare un peggioramento temporaneo delle prestazioni dell'applicazione. Accertatevi di provare l'applicazione nei dispositivi più vecchi in quanto potrebbero disporre di una quantità di memoria notevolmente inferiore per il processo in esecuzione.

Quando eseguite il debug dell'applicazione sull'iPhone, potete abilitare la funzione di diagnostica del rendering GPU. Questa funzione consente di vedere in che modo l'applicazione usa il rendering GPU. Per ulteriori informazioni, vedete “Debug con la diagnostica del rendering GPU” in Debug di un'applicazione iPhone .

Per informazioni sull'utilizzo della proprietà cacheAsBitmapMatrix , vedete la sezione “DisplayObject.cacheAsBitmapMatrix” in API di ActionScript specifiche per applicazioni AIR per dispositivi mobili .