Przyspieszanie sprzętowe

Możliwe jest wykorzystanie sprzętowej akceleracji OpenGL ES-1.1 w celu zwiększenia wydajności graficznej niektórych aplikacji. W wyniku zastosowania akceleratora sprzętowego mogą wiele zyskać gry oraz inne aplikacje, w których występują animowane obiekty wyświetlane. Aplikacje, w których stosuje się akcelerację sprzętową, mogą przerzucać niektóre zadania graficzne z procesora CPU na procesor GPU telefonu iPhone, co często skutkuje znacznym wzrostem wydajności.

Projektując aplikację korzystającą z procesora GPU, należy przestrzegać reguł zapewniających efektywną sprzętową akcelerację wyświetlania treści.

Aby użyć akceleracji sprzętowej, ustaw opcję Rendering dla GPU na karcie Ogólne w oknie dialogowym Ustawienia telefonu iPhone w programie Flash Professional CS5. Można również ustawić właściwość renderMode na wartość gpu w pliku deskryptora aplikacji:

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

Więcej informacji można znaleźć w sekcjach Ustawianie właściwości aplikacji na telefon iPhone w programie Flash Professional CS5 i Ustawianie właściwości aplikacji na telefon iPhone w pliku deskryptora aplikacji .

Wyróżnia się cztery klasy obiektów wyświetlanych, które mogą być szybko renderowane przy wykorzystaniu akceleracji sprzętowej, jeśli ich treść rzadko ulega zmianom:

  • Obiekty bitmapowe.

  • Dwuwymiarowe obiekty wyświetlane, których właściwość cacheAsBitmap ma wartość true i których właściwość cacheAsBitmapMatrix jest (opcjonalnie) ustawiona — zobacz niżej.

  • Trójwymiarowe obiekty wyświetlane (tj. obiekty z ustawioną właściwością z ).

  • Obiekty wyświetlane o jednokolorowym prostokątnym wypełnieniu i krawędziach wyrównanych względem pikseli na ekranie.

Obiekty wektorowe są renderowane przy każdej animacji ikonki nad lub pod nimi. Każdy obiekt pełniący rolę pierwszego lub ostatniego planu animacji powinien również należeć do jednej z tych kategorii.

W przypadku obiektów wyświetlanych, dla których właściwość cacheAsBitmap została ustawiona na wartość true , ustawienie cacheAsBitmapMatrix powoduje użycie przez GPU bitmapy będącej rezultatem transformacji matrycy. GPU korzysta z reprezentacji bitmapy nawet, jeśli obiekt jest obracany albo skalowany. GPU może komponować i animować tę bitmapę znacznie szybciej niż procesor CPU może przerysowywać obiekt renderowany wektorowo.

Samo przypisanie właściwości cacheAsBitmap wartości true powoduje, że obiekt wyświetlany (i wszelkie jego obiekty podrzędne) jest buforowany w pamięci podręcznej. Obiekt wyświetlany nie jest przerysowywany, gdy odsłaniane są nowe regiony lub gdy następuje przemieszczenie całej kompozycji graficznej.

Po ustawieniu właściwości obiektu wyświetlanego cacheAsBitmapMatrix aplikacja może stworzyć reprezentację obiektu wyświetlanego nawet wówczas, gdy nie jest on widoczny. Aplikacja buduje reprezentację przechwytywanego obiektu wyświetlanego wraz z początkiem następnej klatki. Następnie, podczas dodawania obiektu wyświetlanego na stół montażowy, aplikacja szybko go renderuje. Aplikacja umożliwia także szybkie animowanie obrotu lub skalowania obiektu. W przypadku obiektów obracanych lub skalowanych nie należy ustawiać właściwości cacheAsBitmap bez ustawiania także właściwości cacheAsBitmapMatrix .

Aplikacja może również szybko przeprowadzać transformacje kanału alfa na obiekcie buforowanym jako bitmapa. Jednak w przypadku transformacji kanału alfa przyspieszanych sprzętowo obsługiwane są tylko wartości alpha z przedziału od 0 do 1,0. Przedział ten odpowiada ustawieniom właściwości colorTransform.alphaMultiplier z przedziału od 0 do 256.

Nie należy ustawiać właściwości cacheAsBitmap na wartość true w przypadku często aktualizowanych obiektów, takich jak pola tekstowe.

Obiekty wyświetlane o często zmieniającej się treści graficznej z reguły niezbyt dobrze nadają się do renderowania przy użyciu procesora GPU. Zasada ta dotyczy szczególnie starszych urządzeń ze słabszymi procesorami GPU. Narzut związany z przekazywaniem danych graficznych do procesora GPU może spowodować, że renderowanie przy użyciu procesora głównego (CPU) będzie bardziej efektywnym rozwiązaniem.

Należy zoptymalizować strukturę obiektów wyświetlanych zawierających podrzędne obiekty wyświetlane poruszające się względem obiektu nadrzędnego. Należy zmienić je w taki sposób, aby stały się obiektami równorzędnymi względem dotychczasowego obiektu nadrzędnego. Dzięki temu każdy z nich będzie miał swoją własną reprezentację bitmapową. Ponadto każdy obiekt wyświetlany będzie mógł przemieszczać się względem pozostałych bez konieczności przekazywania nowych danych graficznych do procesora GPU.

Właściwość cacheAsBitmap należy ustawić na wartość true na najwyższym poziomie listy wyświetlania, na którym nie są animowane podrzędne obiekty wyświetlane. Innymi słowy, należy ustawić je dla kontenerów obiektów wyświetlanych, które nie zawierają ruchomych części. Nie należy ustawiać ich dla podrzędnych obiektów wyświetlanych. Nie należy ustawiać ich dla ikonek zawierających inne obiekty wyświetlane, podlegające animacji.

W przypadku ustawienia właściwości z obiektu wyświetlanego aplikacja zawsze używa zbuforowanej reprezentacji bitmapy. W przypadku ustawienia właściwości z obiektu wyświetlanego aplikacja używa zbuforowanej reprezentacji bitmapy, nawet w przypadku obracania lub skalowania obiektu. Aplikacja nie używa właściwości cacheAsBitmapMatrix dla obiektów wyświetlanych, dla których ustawiono właściwość z . Ta sama reguła ma zastosowanie w przypadku ustawienia dowolnych właściwości trójwymiarowego obiektu wyświetlanego, w tym właściwości rotationX , rotationY , rotationZ i transform.matrix3D .

Nie należy ustawiać właściwości scrollRect ani mask kontenera obiektu wyświetlanego zawierającego treść, dla której ma zostać użyta akceleracja sprzętowa. Ustawienie tych właściwości dezaktywuje akcelerację sprzętową dla kontenera obiektu wyświetlanego i jego obiektów podrzędnych. Zamiast ustawiać wartość właściwości mask , można także nałożyć obiekt wyświetlany maski na obiekt maskowany.

Obowiązuje ograniczenie wymiarów obiektów wyświetlanych, które mogą być objęte akceleracją sprzętową. Na starszych urządzeniach obowiązuje ograniczenie szerokości i wysokości do 1024 pikseli (lub mniejszej wartości). Na nowszych urządzeniach obowiązuje ograniczenie do 2048 pikseli (lub mniejszej wartości). Narzędzie do diagnostyki renderowania przy użyciu procesora GPU umożliwia przetestowanie wydajności renderowania na urządzeniu.

Procesor GPU korzysta również z pamięci RAM telefonu iPhone do zapisywania obrazów bitmapowych. Korzysta on z co najmniej takiej ilości pamięci, jaka jest używana na potrzeby obiektów bitmapowych.

Procesor GPU korzysta z przydziałów pamięci stanowiących potęgę liczby 2 dla każdego z wymiarów obiektu bitmapowego. Na przykład procesor GPU może rezerwować pamięć na obrazy o wymiarach 512 x 1024 lub 8 x 32. Obraz o wielkości 9 x 15 pikseli zajmuje wówczas tę samą ilość pamięci, co obraz o wymiarach 16 x 16 pikseli. W przypadku buforowanych obiektów wyświetlanych celowe może być użycie obu wymiarów bliskich potędze 2 (ale nie większych). Na przykład bardziej efektywne jest użycie obiektu wyświetlanego o wielkości 32 x 16 pikseli niż obiektu o wielkości 33 x 17 pikseli.

Nie należy polegać na zmianie wymiarów obiektu Stage w przypadku konieczności zmniejszenia wielkości zasobów dostosowanych pod tym kątem do innych platform (takich jak pulpit). Zamiast tego należy użyć właściwości cacheAsBitmapMatrix lub zmienić wielkość zasobów przed opublikowaniem treści na potrzeby telefonu iPhone. Obiekty 3D ignorują właściwość cacheAsBitmapMatrix w przypadku przechwytywania obrazu powierzchni. Z tego względu bardziej przydatna może okazać się zmiana wielkości obiektów wyświetlanych przed ich opublikowaniem, o ile będą one renderowane na powierzchni 3D.

Jest to swego rodzaju kompromis pomiędzy zaletami akceleracji sprzętowej a wykorzystaniem pamięci RAM. W miarę zapełniania się pamięci system operacyjny iPhone OS informuje inne, działające aplikacje rodzime platformy iPhone o zwolnieniu pamięci. W miarę przetwarzania tej informacji przez aplikacje i zwalniania pamięci mogą one konkurować z bieżącą aplikacją o cykle procesora. Może to na krótki czas obniżyć wydajność bieżącej aplikacji. Należy koniecznie przetestować aplikację na urządzeniach starszego typu, ponieważ mogą one dysponować znacznie mniejszymi zasobami pamięci na potrzeby uruchamiania procesów.

Podczas debugowania aplikacji na telefonie iPhone można włączyć funkcję diagnostyki renderowania przy użyciu procesora GPU. Funkcja ta ułatwia ocenę wykorzystania procesora GPU do renderowania treści w aplikacji. Więcej informacji zawiera sekcja „Diagnostyka renderowania przy użyciu procesora GPU” w rozdziale Debugowanie aplikacji na telefon iPhone .

Więcej informacji na temat używania właściwości cacheAsBitmapMatrix zawiera sekcja „DisplayObject.cacheAsBitmapMatrix” w sekcji Elementy interfejsu API ActionScript przeznaczone do tworzenia aplikacji AIR na urządzenia mobilne .