Wskazówki dotyczące optymalizacji wydajności renderowania GPU

Renderowanie GPU może znacznie poprawić wydajność zawartości SWF, jest jednak ważne odpowiednie zaprojektowanie takiej zawartości. Ustawienia wcześniej dobrze działające dla renderowania programowego mogą nie być odpowiednie w przypadku renderowania GPU. Poniższe wskazówki pozwolą uzyskać wysoką wydajność renderowania GPU bez obniżania wydajności renderowania programowego.

Uwaga: Urządzenia przenośne obsługujące renderowanie sprzętowe często uzyskują dostęp do zawartości SWF w Internecie. Z tego powodu warto skorzystać z poniższych porad podczas tworzenia zawartości SWF, tak aby oferowała ona możliwie najlepszą wydajność na dowolnym ekranie.
  • Należy unikać stosowania wartości wmode=transparent i wmode=opaque w parametrach osadzania HTML. Te tryby mogą skutkować obniżoną wydajnością. Mogą również pogorszyć synchronizację między dźwiękiem a materiałem wideo zarówno w przypadku renderowania programowego, jak i sprzętowego. Wiele platform nie obsługuje renderowania GPU, gdy jest aktywny jeden z tych trybów, co może znacznie obniżyć wydajność.

  • Należy stosować tylko tryby normalny i mieszania alfa. Należy unikać używania innych trybów mieszania, szczególnie trybu mieszania warstw. Podczas renderowania GPU niektóre tryby mieszania nie są wiernie reprezentowane.

  • Gdy GPU renderuje grafikę wektorową, przed rysowaniem tworzy siatkę złożoną z małych trójkątów. Proces ten jest określany jako tworzenie mozaiki. Tworzenie mozaiki wymaga wykonania pewnych obliczeń, których złożoność rośnie wraz ze złożonością kształtów. Aby ograniczyć wpływ tej operacji na wydajność, należy unikać zmiennych kształtów, które wymagają tworzenia mozaiki przez GPU w każdej klatce.

  • Należy unikać stosowania przecinających się krzywych, bardzo cienkich obszarów ograniczonych krzywymi (na przykład cienkiego półksiężyca) oraz skomplikowanych szczegółów na krawędziach kształtów. Tworzenie siatek trójkątów z takich kształtów przez GPU wymaga złożonych obliczeń. Aby wyjaśnić tę kwestię, rozważmy dwa wektory: kwadrat 500 x 500 i półksiężyc 100 x 10. Renderowanie dużego kwadratu nie wymaga wielu obliczeń GPU, ponieważ są to tylko dwa trójkąty. Krzywa półksiężyca wymaga jednak wielu trójkątów do prawidłowego przedstawienia. Renderowanie tego kształtu jest więc znacznie bardziej skomplikowane, mimo iż zawiera on mniej pikseli.

  • Należy unikać dużych zmian skali, ponieważ one również mogą wymuszać ponowne tworzenie mozaiki grafiki przez GPU.

  • Gdy tylko jest to możliwe, należy unikać nakładania grafiki. Nakładanie grafiki polega na układaniu wielu warstw elementów graficznych w taki sposób, że elementy się nawzajem zasłaniają. W przypadku renderowania programowego każdy piksel jest rysowany tylko raz. Wydajność aplikacji nie zależy więc od liczby elementów graficznych zakrywających się wzajemnie w danym pikselu. Renderowanie sprzętowe powoduje natomiast rysowanie każdego piksela dla każdego elementu, nawet jeśli element jest w danym obszarze zasłonięty. Jeśli dwa prostokąty nakładają się na siebie, podczas renderowania sprzętowego obszar wspólny jest rysowany dwukrotnie (mimo iż byłby rysowany jeden raz w przypadku renderowania programowego).

    Nakładanie grafiki nie obniża wydajności na komputerach, gdyż jest w tym przypadku stosowane renderowanie programowe. Nakładające się kształty mogą natomiast pogorszyć wydajność na urządzeniach, na których jest używane renderowanie GPU. Sprawdzoną procedurą jest usuwanie obiektów z listy wyświetlania (zamiast ich ukrywania).

  • Należy unikać stosowania dużego, wypełnionego prostokąta w charakterze tła. Zamiast tego należy ustawić kolor tła obiektu Stage.

  • Należy unikać domyślnego trybu wypełniania bitmapą, który polega na powtarzaniu obrazu bitmapy we wszystkich możliwych miejscach. Zamiast tego należy stosować tryb ściskania, który oferuje lepszą wydajność.