Bezpośredni mipmapping

Mipmapping umożliwia skalowanie dużych obrazów.

Inną nową funkcją dostępną w programie Flash Player 10.1 i środowisku AIR 2.5 na wszystkich platformach jest mipmapping. W programie Flash Player 9 i środowisku AIR 1.0 wprowadzono funkcję mipmappingu, która zwiększała jakość i wydajność bitmap o zmniejszonej skali.

Uwaga: Funkcja mipmappingu ma zastosowanie tylko do dynamicznie ładowanych obrazów lub osadzonych bitmap. Nie ma natomiast zastosowania do obiektów wyświetlanych, które były filtrowane lub zapisane w pamięci podręcznej. Funkcja mipmapping może być stosowana tylko wówczas, gdy szerokość i wysokość bitmapy są liczbami parzystymi. Jeśli szerokość lub wysokość jest liczbą nieparzystą, mipmapping zostanie przerwany. Na przykład: możliwe jest zastosowanie mipmappingu do obrazu o wymiarach 250 x 250 — wynikiem będzie obraz o wymiarach 125 x 125 i do tego obrazu wynikowego nie można już zastosować mipmappingu. W tym przypadku co najmniej jeden z wymiarów jest liczbą nieparzystą. Mipmapping gwarantuje najlepsze wyniki w przypadku bitmap, których wymiary są potęgami cyfry 2, np.: 256 x 256, 512 x 512, 1024 x 1024 itd.

Na przykład: wyobraźmy sobie, że załadowano obraz o rozmiarach 1024 x 1024, a programista chce przeskalować ten obraz, aby utworzyć jego miniaturę w galerii. Funkcja mipmappingu renderuje poprawnie przeskalowany obraz, ponieważ wykorzystuje jako tekstury pośrednie wersje bitmapy ze zredukowaną liczbą bitów. W poprzednich wersjach środowisko wykonawcze tworzyło pośrednie, przeskalowane wersje bitmapy w pamięci. Jeśli został wczytany obraz o rozmiarach 1024 x 1024, a następnie został wyświetlony w rozdzielczości 64 x 64, starsze wersje środowiska wykonawczego tworzyły bitmapy o kolejnych rozmiarach zredukowanych o połowę. Na przykład w opisywanym przypadku utworzone zostałyby bitmapy o rozmiarach 512 x 512, 256 x 256, 128 x 128 i 64 x 64.

Program Flash Player 10.1 i środowisko AIR 2.5 realizuje mipmapping bezpośrednio z oryginalnego źródła do wymaganego rozmiaru docelowego. W poprzednim przykładzie utworzone zostałyby tylko: oryginalna bitmapa o wielkości 4 MB (1024 x 1024) i bitmapa o wielkości 16 kB (64 x 64) będąca wynikiem działania funkcji mipmappingu.

Logika mipmappingu działa również z funkcją dynamicznego usuwania bitmapy. Jeśli używana jest tylko bitmapa 64 x 64, wówczas oryginalna bitmapa o wielkości 4 MB zostanie usunięta z pamięci. Jeśli wymagane będzie ponowne przeprowadzenie mipmappingu, oryginalna bitmapa zostanie ponownie załadowana. Ponadto jeśli wymagane są wynikowe bitmapy o różnych wielkościach, zostanie wykorzystany łańcuch bitmap powstających w wyniku mipmappingu. Na przykład: jeśli konieczne jest utworzenie bitmapy 1:8, sprawdzane są bitmapy 1:4, 1:2 i 1:1 w celu określenia, która z nich zostanie załadowana do pamięci jako pierwsza. Jeśli nie zostaną znalezione inne wersje, z zasobu zostanie załadowana oryginalna bitmapa 1:1.

Dekompresor JPEG może realizować funkcję mipmappingu w swoim własnym formacie. Taki bezpośredni mipmapping umożliwia dekompresję dużej bitmapy bezpośrednio do formatu mipmapy bez konieczności ładowania całego zdekompresowanego obrazu. Generowanie mipmapy jest znacznie szybsze, a pamięć wykorzystywana przez duże bitmapy nie jest przydzielana, a następnie zwalniana. Jakość obrazów JPEG jest porównywalna z jakością obrazów uzyskiwanych za pomocą uniwersalnej techniki mipmappingu.

Uwaga: Z funkcji mipmappingu należy korzystać ostrożnie. Efektem jej stosowania jest poprawa jakości zmniejszanych bitmap, ale funkcja znacznie ogranicza przepustowość, obciążą pamięć i spowalnia działanie systemu. W niektórych przypadkach lepszym rozwiązaniem jest użycie wstępnie zeskalowanej wersji bitmapy z zewnętrznego narzędzia i zaimportowanie jej do aplikacji. Nie należy korzystać z dużych bitmap, jeśli są one przeznaczone wyłącznie do zmniejszenia poprzez skalowanie.