2011-12-20 9 views
5

Chciałbym wiedzieć, czy istnieje jakiekolwiek ograniczenie rozmiaru tekstury, który może być użyty w dowolnych projektach Android OpenGL Es 2.0. Rozumiem, że posiadanie ogromnej tekstury o rozmiarze 4096x4096 jest nieco mniej znaczące, ponieważ jest renderowane na małym ekranie. Ale co, jeśli wymaganie polega na przełączaniu się pomiędzy wieloma teksturami w czasie wykonywania? A jeśli chcę mieć atlas tekstur do szybkiego pojedynczego przesłania, zamiast wielokrotnego wysyłania mniejszych tekstur. Proszę dać mi znać swoje pomysły w tym zakresie.Ograniczenie rozmiaru tekstury? Android Open GL ES 2.0

Jestem także pewien, że musi istnieć ograniczenie rozmiaru obrazu, który może być przetwarzany przez urządzenie, ponieważ pamięć urządzenia jest ograniczona. Ale chciałbym wiedzieć, czy jest to oparte na rozdzielczości, czy jest oparte na rozmiarze. Chodzi mi o to, że jeśli urządzenie ma ograniczenie rozmiaru obrazu 1024x1024, może obsłużyć skompresowaną teksturę o rozmiarze 2048x2048, która byłaby tego samego rozmiaru ok. Jako nieskompresowana 1024x1024.

Proszę również, proszę, poinformować mnie na ogół o tym, jak bardzo ograniczenie rozmiaru tekstury lub rozdzielczości będzie normalne dla urządzeń z systemem Android 2.2 lub nowszym.

Proszę również dać mi znać, jeśli istnieją najlepsze metody postępowania z obrazami o wysokiej rozdzielczości w opengle 2.0, aby uzyskać najlepszą wydajność zarówno w czasie ładowania, jak iw czasie pracy.

Odpowiedz

21

Występuje ograniczenie sprzętowe dla rozmiarów tekstur. Aby ręcznie sprawdzić, możesz przejść do strony, takiej jak glbenchmark.com (tutaj wyświetla się szczegółowe informacje na temat Google galaxy nexus).
automatycznie znaleźć maksymalny rozmiar z kodu, można użyć coś takiego:

int[] max = new int[1]; 
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, max, 0); //put the maximum texture size in the array. 

(Dla GL10, ale sama metoda istnieje GLES20)

Jeśli chodzi o przetwarzanie lub Edytowanie obrazu, który zwykle używasz instancji Bitmap podczas pracy w systemie Android. Zachowuje to nieskompresowane wartości obrazu i dlatego zależy od rozdzielczości. Jednak jest recommended, że używasz skompresowanych tekstur dla aplikacji OpenGL, ponieważ poprawia to efektywność wykorzystania pamięci (pamiętaj, że nie można modyfikować tych skompresowanych tekstur).
Z previous link:

kompresja tekstur może znacznie zwiększyć wydajność aplikacji OpenGL poprzez zmniejszenie zapotrzebowania na pamięć i co więcej efektywne wykorzystanie przepustowości pamięci. Ramy Android zapewnia wsparcie dla formatu kompresji ETC1 w standardzie [...]

Należy przyjrzeć się this document która zawiera wiele dobrych praktyk i wskazówek o ładowaniu tekstury i użytkowania. Autor wyraźnie pisze:

Najlepsza praktyka: Użyj ETC do kompresji tekstur.

Najlepsza praktyka: Upewnij się, że rozdzielczość geometrii i tekstury są odpowiednie dla rozmiaru, w jakim są wyświetlane. Nie używaj tekstury 1k x 1k dla czegoś, co najwyżej 500 pikseli szerokości na ekranie. The to samo dla geometrii.

Powiązane problemy