U kunt OpenGL ES-1.1-hardwareversnelling gebruiken om de grafische prestaties in sommige toepassingen te verbeteren. Games en andere toepassingen waarin weergaveobjecten van animatie zijn voorzien, kunnen van de hardwareversnelling profiteren. Toepassingen die hardwareversnelling gebruiken, kunnen sommige grafische processen overdragen van de CPU naar de GPU van de iPhone. De prestaties kunnen hierdoor sterk worden verbeterd.
Bij het ontwerpen van een toepassing die de GPU gaat gebruiken, is het belangrijk richtlijnen te volgen die ervoor zorgen dat GPU-versnelling op de juiste manier op de inhoud wordt toegepast.
Als u hardwareversnelling wilt gebruiken, stelt u Rendering in op GPU in het tabblad Algemeen van het dialoogvenster iPhone-instellingen in Flash Professional CS5. U kunt ook de eigenschap
renderMode
instellen op
gpu
in het descriptorbestand van de toepassing:
<initialWindow>
<renderMode>gpu</renderMode>
...
Zie
Eigenschappen voor iPhone-toepassingen instellen in Flash Professional CS5
en
Eigenschappen voor iPhone-toepassingen instellen in het descriptorbestand van de toepassing
.
Er zijn vier klassen weergaveobjecten die bij hardwareversnelling snel kunnen worden gerenderd als de inhoud van deze objecten niet regelmatig verandert:
-
Bitmapobjecten
-
2D-weergaveobjecten waarvoor de eigenschap
cacheAsBitmap
is ingesteld op
true
en waarvoor eventueel de eigenschap
cacheAsBitmapMatrix
is ingesteld (zie verderop)
-
3D-weergaveobjecten (objecten waarvoor de eigenschap
z
is ingesteld)
-
Weergaveobjecten met één effen, rechthoekige vulling en met randen die worden uitgelijnd met de pixels op het scherm.
Op vectors gebaseerde objecten worden opnieuw gerenderd wanneer een andere sprite erboven of eronder wordt geanimeerd. Elk object dat dus als achtergrond of voorgrond fungeert voor een animatie, moet ook tot een van deze categorieën behoren.
De GPU gebruikt de bitmap die het resultaat is van de matrixtransformatie wanneer u voor weergaveobjecten waarvoor
cacheAsBitmap
is ingesteld op
true
ook
cacheAsBitmapMatrix
instelt. De GPU gebruikt de bitmaprepresentatie, ook als het object geroteerd of geschaald is. De GPU kan deze bitmap sneller samenstellen en animeren dan de CPU een door vectors gerenderd object kan vernieuwen.
Als alleen
cacheAsBitmap
op
true
wordt ingesteld, wordt een weergaveobject in de cache opgeslagen. Dit geldt eveneens voor eventuele onderliggende objecten. Het weergaveobject wordt niet vernieuwd wanneer nieuwe gebieden beschikbaar worden gemaakt of de hele gecombineerde afbeelding wordt vertaald.
Wanneer de eigenschap
cacheAsBitmapMatrix
van een weergaveobject is ingesteld, kan de toepassing een representatie van het weergaveobject bouwen, ook wanneer het object niet zichtbaar is. De toepassing stelt een cacherepresentatie van het weergaveobject samen aan het begin van het volgende frame. Als u het weergaveobject dan aan het werkgebied toevoegt, kan de toepassing het snel renderen. De toepassing kan het object ook snel animeren, roteren of schalen. Stel voor objecten die worden geroteerd of geschaald de eigenschap
cacheAsBitmap
niet in zonder ook de eigenschap
cacheAsBitmapMatrix
in te stellen.
De toepassing kan ook snel alfatransformatie uitvoeren op een object dat in de cache is opgeslagen als een bitmap. Er is echter alleen ondersteuning voor
alfa
-waarden tussen 0 en 1,0 voor alfatransformaties op basis van hardwareversnelling. Dit komt overeen met een instelling tussen 0 en 256 voor
colorTransform.alphaMultiplier
.
Stel de eigenschap
cacheAsBitmap
niet in op
true
voor objecten die vaak worden bijgewerkt, zoals tekstvelden.
Weergaveobjecten met grafische inhoud die vaak wordt gewijzigd, zijn over het algemeen niet erg geschikt voor GPU-rendering. Dit geldt met name voor oudere apparaten met minder krachtige GPU's. Doordat in deze gevallen het uploaden van afbeeldingen naar de GPU een zware belasting vormt, kan er beter gebruik worden gemaakt van CPU-rendering.
Herstructureer weergaveobjecten met onderliggende weergaveobjecten die relatief bewegen ten opzichte van het bovenliggende object. Wijzig deze onderliggende weergaveobjecten zodat ze niet langer onderliggend zijn, maar zich op hetzelfde niveau bevinden als het bovenliggende object. Op deze manier zorgt u ervoor dat elk object een eigen bitmaprepresentatie heeft. Ook kan elk weergaveobject hierdoor relatief bewegen ten opzichte van de andere objecten, zonder dat er nieuwe afbeeldingen naar de GPU moeten worden geüpload.
Stel de eigenschap
cacheAsBitmap
in op
true
op het hoogste niveau van de weergavelijst, waarbij onderliggende weergaveobjecten geen animatie hebben. Met andere woorden, stel de eigenschap in voor weergaveobjectcontainers die geen bewegende onderdelen bevatten. Stel de eigenschap niet in voor de onderliggende weergaveobjecten. Stel de eigenschap
niet
in voor sprites met andere weergaveobjecten met animatie.
Wanneer u de eigenschap
z
van een weergaveobject instelt, gebruikt de toepassing altijd een bitmaprepresentatie die in de cache staat. En ook nadat u de eigenschap
z
van een weergaveobject hebt ingesteld, gebruikt de toepassing de bitmaprepresentatie in de cache, ook als u het object roteert of schaalt. De toepassing maakt geen gebruik van de eigenschap
cacheAsBitmapMatrix
voor weergaveobjecten waarvoor een eigenschap
z
is ingesteld. Dezelfde regels gelden wanneer u driedimensionale eigenschappen voor een weergaveobject instelt, zoals de eigenschappen
rotationX
,
rotationY
,
rotationZ
en
transform.matrix3D
.
Als een weergaveobjectcontainer inhoud bevat waarvoor u hardwareversnelling wilt gebruiken, moet u de eigenschappen
scrollRect
of
mask
niet instellen. Als u deze eigenschappen instelt, wordt hardwareversnelling voor de weergaveobjectcontainer en de onderliggende items uitgeschakeld. Als alternatief voor het instellen van de eigenschap
mask
, kunt u een maskerweergaveobject plaatsen op het weergaveobject dat u wilt maskeren.
De weergaveobjecten die beschikbaar zijn voor hardwareversnelling kennen een limiet als het gaat om het formaat. Op oudere apparaten is de limiet 1024 pixels of minder in zowel de lengte als de breedte. Op nieuwere apparaten is de limiet 2048 pixels of minder. U kunt het diagnostische gereedschap voor GPU-rendering gebruiken om de prestaties op een apparaat te testen.
De GPU maakt ook gebruik van het RAM-geheugen van de iPhone om bitmapafbeeldingen op te slaan. Er wordt zoveel geheugen gebruikt als minimaal nodig is voor de bitmapafbeeldingen.
De GPU gebruikt voor elke dimensie van de bitmapafbeelding geheugentoewijzingen die machten van 2 zijn. De GPU kan bijvoorbeeld geheugen in groottes van 512 x 1024 of 8 x 32 reserveren. Een afbeelding van 9 x 15 pixels neemt dus net zoveel ruimte in beslag als een afbeelding van 16 x 16 pixels. Voor weergaveobjecten in de cache is het raadzaam voor elke richting afmetingen te gebruiken die in de buurt liggen van een macht van twee (niet hoger). Het is bijvoorbeeld efficiënter om een weergaveobject van 32 x 16 pixels te gebruiken dan een weergaveobject van 33 x 17 pixels.
Als het formaat van een werkgebied is gewijzigd, betekent dit niet dat elementen waarvan het formaat is aangepast automatisch worden geschaald. Gebruik liever de eigenschap
cacheAsBitmapMatrix
of pas het formaat van de elementen aan voordat u voor de iPhone publiceert. 3D-objecten negeren de eigenschap
cacheAsBitmapMatrix
bij het in cache plaatsen van een oppervlakteafbeelding. Hierdoor is het beter om vóór publicatie het formaat van weergaveobjecten te wijzigen als deze op een 3D-oppervlak worden gerenderd.
Het gebruik van hardwareversnelling kan ten koste gaan van het gebruik van het RAM-geheugen. Naarmate het geheugen voller raakt, vraagt het iPhone OS aan andere actieve oorspronkelijke iPhone-toepassingen om geheugen vrij te maken. Tijdens het vrij maken van geheugen kan het zijn dat deze toepassingen met uw toepassing strijden om CPU-cycli. Dit kan tijdelijk ten koste gaan van de prestaties van uw toepassing. Test uw toepassing op oudere toestellen, omdat het kan zijn dat deze over aanzienlijk minder geheugen beschikken voor uw actieve proces.
Bij het opsporen van fouten in de toepassing op de iPhone, kunt u de diagnostische functie voor GPU-rendering inschakelen. Met behulp van deze functie kunt u zien hoe uw toepassing GPU-rendering gebruikt. Zie "Foutopsporing met de diagnostische functie voor GPU-rendering" in
Fouten opsporen in een iPhone-toepassing
voor meer informatie.
Meer informatie over de
cacheAsBitmapMatrix
-eigenschap vindt u in de sectie "DisplayObject.cacheAsBitmapMatrix" in
API's van ActionScript die specifiek zijn voor mobiele AIR-toepassingen
.