[ Pobierz całość w formacie PDF ]
GL_NV_* są charakterystyczne dla sprzętu Nvidii. Na podstawie obsługiwanych rozszerzeń można
zwykle stwierdzić, która firma jest producentem procesora graficznego zastosowanego w urządzeniu.
Rozszerzenia procesorów ARM mają przedrostek GL_ARM.
Rozszerzenia procesorów firmy Imagination Technologies mają przedrostek GL_IMG.
Rozszerzenia procesorów Nvidii mają przedrostek GL_NV.
Rozszerzenia procesorów firmy Qualcomm mają przedrostki GL_QUALCOMM, GL_AMD
i GL_ATI.
Uwaga Wi cej informacji znajdziesz na stronach http://www.khronos.org/registry/gles
i http://www.opengl.org/registry.
Ponieważ nie wszystkie urządzenia obsługują te same rozszerzenia (warto przypomnieć tu
o fragmentacji rynku), trzeba zachować dużą ostrożność przy optymalizowaniu kodu pod kątem
konkretnego urządzenia. Czasem kod, który działa w jednym urządzeniu, nie będzie działał w innym.
Typowymi przykładami technik obsługiwanych tylko w niektórych urządzeniach są tekstury typu
NPOT (ang. Non-Power-Of-Two) i format kompresji tekstur. Jeśli chcesz, aby kod był zgodny także
z urządzeniami bez Androida, zwróć uwagę na rozszerzenia obsługiwane przez docelowe urządzenia.
Obecnie urzÄ…dzenia Apple a (iPhone, iPod i iPad) sÄ… oparte na procesorze PowerVR firmy Imagination
Technologies, jednak w przyszłych urządzeniach Apple a mogą pojawić się inne procesory.
Kompresja tekstur
Od tekstur zależy wygląd aplikacji wykorzystujących OpenGL ES. Choć korzystanie
z nieskompresowanych tekstur jest proste, tekstury tego rodzaju powodujÄ… szybki wzrost
wielkoÅ›ci aplikacji. Na przykÅ‚ad nieskompresowana tekstura o wymiarach 256×256 w formacie
RGBA8888 może zajmować 256 kilobajtów pamięci.
207
Kup ksi k Poleć ksi k
ROZDZIA 8. GRAFIKA
Nieskompresowane tekstury negatywnie wpływają na wydajność, ponieważ trudniej jest je
zapisać w pamięci podręcznej niż tekstury skompresowane (z uwagi na wielkość). Ponadto wymagają
dłuższego dostępu do pamięci, co wpływa także na zużycie energii. Aplikacje z nieskompresowanymi
teksturami są również większe, dlatego dłużej trwa ich pobieranie i instalowanie. Oprócz tego ilość
pamięci w urządzeniach z Androidem jest zwykle ograniczona, dlatego w aplikacjach należy zajmować
jej jak najmniej.
Na poniższej liście wymieniono formaty kompresji tekstur obsługiwane w urządzeniu Samsung
Galaxy Tab 10.1:
GL_OES_compressed_ETC1_RGB8_texture,
GL_EXT_texture_compression_latc,
GL_EXT_texture_compression_dxt1,
GL_EXT_texture_compression_s3tc.
Format kompresji ETC1 został opracowany w firmie Ericsson (ETC to akronim nazwy Ericsson
Texture Compression) i jest obsługiwany przez większość urządzeń z Androidem, w tym przez wszystkie
takie urzÄ…dzenia zgodne ze standardem OpenGL ES 2.0. Dlatego jest to najbezpieczniejszy format ze
względu na liczbę obsługiwanych urządzeń. Używa się w nim 4 bitów na piksel zamiast 24 (format ETC1
nie obsługuje kanału alfa), co zapewnia sześciokrotny poziom kompresji. Jeśli dodać 16-bajtowy
nagłówek, tekstura o wymiarach 256×256 w formacie ETC1 zajmuje 32 784 bajty.
Istnieje wiele narzędzi do tworzenia tekstur w formacie ETC1. W pakiecie SDK Androida
znajduje się uruchamiane z wiersza poleceń narzędzie etc1tool. Służy ono do przekształcania obrazów
w formacie PNG na skompresowane obrazy w formacie ETC1. Poniższa instrukcja kompresuje plik
lassen.png (183 kilobajty) i pokazuje różnicę między pierwotnym a skompresowanym plikiem:
etc1tool lassen.png --encode --showDifference lassen_diff.png
Jeśli programista nie podał pliku wynikowego, nazwa pliku jest generowana na podstawie pliku
wejściowego. Tu plik wynikowy to lassen.pkm (zajmuje 33 kilobajty). Na rysunku 8.3 pokazano
różnicę między skompresowaną grafiką a oryginałem.
Rysunek 8.3. Pierwotny rysunek (po lewej) i różnica w stosunku do skompresowanej wersji (po prawej)
Uwaga Za pomoc narz dzia etc1tool mo na te przekszta ci plik w formacie ETC1 na obraz w formacie PNG.
Wi cej informacji o tym narz dziu znajdziesz na stronie
http://d.android.com/guide/developing/tools/etc1tool.html.
Niestety, narzędzie etc1tool z pakietu SDK Androida udostępnia niewiele opcji. Dlatego programiści,
którzy chcą zachować kontrolę nad kompresją i jakością grafiki, powinni stosować inne narzędzie
etcpack. Można je pobrać z witryny firmy Ericsson (http://devtools.ericsson.com/etc). Pozwala ono
ustawić następujące opcje:
208
Kup ksi k Poleć ksi k
STANDARD OPENGL ES
szybkość kompresji (mniejsza szybkość to wyższa jakość),
miarę błędu (percepcyjna lub niepercepcyjna),
orientacjÄ™.
Jeśli tekstury są generowane stacjonarnie (czyli nie na samym urządzeniu z Androidem),
zawsze należy zastosować jak najwyższą jakość kompresji. Ponieważ ludzkie oko jest wrażliwsze na
[ Pobierz całość w formacie PDF ]