Sie können die OpenGL ES 1.1 Hardwarebeschleunigung verwenden, um die Grafikleistung in einigen Anwendungen zu verbessern. Spiele und andere Anwendungen mit animierten Anzeigeobjekten können von der Hardwarebeschleunigung profitieren. Anwendungen, die Hardwarebeschleunigung verwenden, können einige Grafikprozesse von der CPU auf die iPhone GPU verlagern, wodurch die Leistung erheblich verbessert werden kann.
Wenn Sie eine Anwendung entwickeln, die die GPU nutzen soll, ist die Einhaltung von Regeln wichtig, die sicherstellen, dass die Inhalt effektiv GPU-beschleunigt wird.
Um die Hardwarebeschleunigung zu verwenden, stellen Sie im Dialogfeld „iPhone-Einstellungen“ von Flash Professional CS5 auf der Registerkarte „Allgemein“ für „Rendering“ die Option „GPU“ ein. Sie können auch die
renderMode
-Eigenschaft in der Anwendungsdeskriptordatei auf
gpu
einstellen:
<initialWindow>
<renderMode>gpu</renderMode>
...
Siehe
Festlegen von iPhone-Anwendungseigenschaften in Flash Professional CS5
und
Festlegen von iPhone-Anwendungseigenschaften in der Anwendungsdeskriptordatei
.
Es gibt vier Klassen von Anzeigeobjekten, die mit Hardwarebeschleunigung schnell dargestellt werden, wenn sich ihre Inhalte nicht so häufig ändern:
-
Bitmap-Objekte
-
2D-Anzeigeobjekte, deren
cacheAsBitmap
-Eigenschaft auf
true
eingestellt ist und deren
cacheAsBitmapMatrix
-Eigenschaft optional eingestellt ist (siehe unten)
-
3D-Anzeigeobjekte (die
z
-Eigenschaft ist eingestellt)
-
Anzeigeobjekte mit einer einfarbigen rechteckigen Füllung und Rändern, die mit den Pixeln auf dem Bildschirm ausgerichtet sind.
Vektorbasierte Objekte werden neu dargestellt, wenn ein anderes Sprite über oder unter ihnen animiert wird. Jedes Objekt, das als Hintergrund oder Vordergrund für eine Animation dient, sollte deshalb ebenfalls einer dieser Kategorien angehören.
Bei Anzeigeobjekten, deren
cacheAsBitmap
-Eigenschaft auf
true
eingestellt ist, führt das Festlegen von
cacheAsBitmapMatrix
dazu, dass die GPU die Bitmap verwendet, die aus der Matrixtransformation resultiert. Die GPU verwendet die Bitmapdarstellung selbst dann, wenn das Objekt gedreht oder skaliert wird. Die GPU kann diese Bitmap viel schneller zusammensetzen und animieren, als die CPU ein vektorbasiertes Objekt neu zeichnen kann.
Wenn Sie
cacheAsBitmap
auf
true
einstellen, werden Anzeigeobjekte (und ihre untergeordneten Elemente) zwischengespeichert. Das Anzeigeobjekt wird nicht neu gezeichnet, wenn neue Bereiche sichtbar werden oder die gesamte Grafik versetzt wird.
Wenn die
cacheAsBitmapMatrix
-Eigenschaft eines Anzeigeobjekts gesetzt ist, kann die Anwendung eine Darstellung des Anzeigeobjekts erstellen, auch wenn dieses nicht sichtbar ist. Die Anwendung erstellt am Anfang des nächsten Bilds eine im Cache gespeicherte Darstellung des Anzeigeobjekts. Wenn Sie das Anzeigeobjekt dann der Bühne hinzufügen, kann es von der Anwendung schnell dargestellt werden. Außerdem kann die Anwendung das Objekt schnell animieren, drehen oder skalieren. Bei Objekten, die gedreht oder skaliert werden, setzen Sie die
cacheAsBitmap
-Eigenschaft nicht, ohne auch die
cacheAsBitmapMatrix
-Eigenschaft einzustellen.
Die Anwendung kann auch Alpha-Transformationen schnell ausführen, wenn ein Objekt als Bitmap zwischengespeichert wurde. Es werden jedoch nur
alpha
-Werte zwischen 0 und 1.0 für hardwarebeschleunigte Alpha-Transformationen unterstützt. Dies entspricht einer
colorTransform.alphaMultiplier
-Einstellung zwischen 0 und 256.
Stellen Sie die
cacheAsBitmap
-Eigenschaft nicht auf
true
, wenn es sich um häufig aktualisierte Objekte handelt, zum Beispiel Textfelder.
Anzeigeobjekte mit häufig geändertem grafischen Inhalt eignen sich im Allgemeinen nicht für die GPU-Darstellung. Dies gilt besonders bei älteren Geräten mit nicht so leistungsstarken GPUs. Aufgrund der Belastung durch das Hochladen der Grafiken zur GPU ist die CPU-Darstellung dann die bessere Wahl.
Strukturieren Sie Anzeigeobjekte mit untergeordneten Anzeigeobjekten, die sich in Relation zum übergeordneten Element bewegen, neu. Ändern Sie sie so, dass die untergeordneten Anzeigeobjekte dem übergeordneten Element gleichgestellt sind. Auf diese Weise haben sie jeweils ihre eigene Bitmapdarstellung. Außerdem kann sich jedes Anzeigeobjekt in Relation zu den anderen Anzeigeobjekten bewegen, ohne dass neue Grafiken zur GPU hochgeladen werden müssen.
Stellen Sie die
cacheAsBitmap
-Eigenschaft auf
true
auf der höchsten Ebene der Anzeigeliste, auf der untergeordnete Anzeigeobjekte nicht animiert werden. Anders ausgedrückt, stellen Sie sie für Anzeigeobjektcontainer ein, die keine bewegten Teile enthalten. Stellen Sie sie nicht für untergeordnete Anzeigeobjekte ein. Stellen Sie sie
nicht
für Sprites ein, die andere animierte Anzeigeobjekte enthalten.
Wenn Sie die
z
-Eigenschaft eines Anzeigeobjekts einstellen, verwendet die Anwendung immer eine zwischengespeicherte Bitmapdarstellung. Nachdem Sie die
z
-Eigenschaft eines Anzeigeobjekts eingestellt haben, verwendet die Anwendung die zwischengespeicherte Bitmapdarstellung auch dann, wenn Sie das Objekt drehen oder skalieren. Die Anwendung verwendet die
cacheAsBitmapMatrix
-Eigenschaft nicht für Anzeigeobjekte, deren
z
-Eigenschaft festgelegt wurde. Dieselben Regeln gelten, wenn Sie Eigenschaften eines dreidimensionalen Anzeigeobjekts festlegen, zum Beispiel
rotationX
,
rotationY
,
rotationZ
und
transform.matrix3D
.
Stellen Sie nicht die
scrollRect
- oder
mask
-Eigenschaft eines Anzeigeobjektcontainers ein, der Inhalt enthält, für den Sie Hardwarebeschleunigung verwenden möchten. Wenn Sie diese Eigenschaften festlegen, wird die Hardwarebeschleunigung für den Anzeigeobjektcontainer und seine untergeordneten Elemente deaktiviert. Als Alternative zum Festlegen der
mask
-Eigenschaft legen Sie ein Masken-Anzeigeobjekt über das maskierte Anzeigeobjekt.
Es gibt Größenbeschränkungen für die Anzeigeobjekte, die für die Hardwarebeschleunigung verfügbar sind. Bei älteren Geräten beträgt diese Grenze für Breite und Höhe jeweils 1024 Pixel oder weniger. Bei neueren Geräten liegt diese Grenze bei 2048 Pixel oder weniger. Mit dem Diagnosetool für die GPU-Darstellung können Sie die Leistung auf einem Gerät testen.
Die GPU verwendet iPhone-RAM zur Speicherung von Bitmapbildern. Sie belegt mindestens so viel Systemspeicher wie für die Bitmapbilder nötig.
Die GPU verwendet Speicherzuordnungen, die für jede Dimension des Bitmapbilds Vielfache von 2 betragen. Beispielsweise kann die GPU Speicher in den Größen 512 x 1024 oder 8 x 32 reservieren. So benötigt ein Bild in der Größe 9 x 15 Pixel genauso viel Speicher wie ein Bild in der Größe 16 x 16 Pixel. Für zwischengespeicherte Anzeigeobjekte sollten Sie am besten in jeder Richtung Abmessungen verwenden, die nahe an Potenzen von 2 (aber nicht mehr) sind. So ist es beispielsweise effizienter, ein Anzeigeobjekt in der Größe 32 x 16 Pixel zu verwenden als eines in der Größe 33 x 17.
Verlassen Sie sich nicht darauf, dass eine Bühne mit geänderter Größe Elemente verkleinert, deren Größe für andere Plattformen (zum Beispiel den Desktop) eingestellt wurde. Verwenden Sie stattdessen die
cacheAsBitmapMatrix
-Eigenschaft oder ändern Sie die Größe der Elemente vor dem Veröffentlichen für das iPhone. 3D-Objekte ignorieren die
cacheAsBitmapMatrix
-Eigenschaft, wenn ein Oberflächenbild zwischengespeichert wird. Aus diesem Grund ist es besser, die Größe von Anzeigeobjekten vor dem Veröffentlichen zu ändern, wenn sie auf einer 3D-Oberfläche dargestellt werden.
Die Vorteile der Hardwarebeschleunigung und der RAM-Verwendung müssen gegeneinander abgewogen werden. Während immer mehr Speicher belegt wird, informiert das iPhone-Betriebssystem andere, native iPhone-Anwendungen, die gerade ausgeführt werden, Speicher freizumachen. Wenn die Anwendungen diese Informationen verarbeiten und versuchen, Speicher freizugeben, können Sie mit Ihrer Anwendung um CPU-Zyklen konkurrieren. Dadurch kann die Leistung Ihrer Anwendung sich vorübergehend verschlechtern. Testen Sie Ihre Anwendung auf älteren Geräten, da auf diesen möglicherweise deutlich weniger Speicher für Ihren Prozess verfügbar ist.
Beim Debuggen der Anwendung auf dem iPhone können Sie die Diagnosefunktion für die GPU-Darstellung aktivieren. Diese Funktion unterstützt Sie dabei, zu sehen, wie Ihre Anwendung die GPU-Darstellung nutzt. Weitere Informationen finden Sie unter „Debuggen mit der GPU-Darstellungsdiagnose“ in
Debuggen von iPhone-Anwendungen
.
Informationen zur Verwendung der
cacheAsBitmapMatrix
-Eigenschaft finden Sie im Abschnitt „DisplayObject.cacheAsBitmapMatrix“ unter
ActionScript-APIs speziell für mobile AIR-Anwendungen
.