Koduję aplikację OpenGL ES 1.1 na Androida i iPhone'a. Silnik OpenGL ES znajduje się we wspólnej bibliotece i jest dostępny za pośrednictwem NDK na Androidzie.OpenGL na Androida i iOS: optymalizacje i tam, gdzie się różnią
Szukam optymalizacji wydajności OpenGL. Jest mnóstwo filmów i zasobów tam, np .:
http://www.vizworld.com/2010/02/ngmocos-tim-omernick-optimizing-opengl-iphone/
OpenGL ES 2.0 : Seeking VBO Performance/Optimisation Tips For Many Moving Vertices
When are VBOs faster than "simple" OpenGL primitives (glBegin())?
https://gamedev.stackexchange.com/questions/1068/opengl-optimization-tips
Ale ogólnie nie są dobrze znane techniki, które stosuje się powszechnie, takie jak:
- obiektów buforowych Zastosowanie wierzchołek (VBOs)
- Minimalizacja stanu OpenGL zmienia
- użycie tekstury atlassing gdzie jest to możliwe, aby uniknąć konieczności wyboru wiele różnych tekstur:
Niektóre techniki są lub mogą być nieco bardziej czułe w ich specyfice i mogą różnić się w zależności od systemu Android i iPhone'a i właśnie to mnie interesuje. le:
- Przepnij dane wierzchołków wewnątrz każdego wierzchołka: np. vertex coord; struktura tekstur; normalna. Czy w przeplotzie jest preferowana kolejność elementów?
- Wyłóż każdy wierzchołek do następnej wielokrotności pewnej liczby bajtów. Widzę, że liczba 32 jest zakręcona, ale w niektórych miejscach widzę też 4 lub 8.
- rozważyć użycie krótki lub podobny dla każdego wierzchołka układzie współrzędnych, zamiast pływaka
Więc moje pytanie brzmi: jakie są drobniejsze szczegóły magicznych optymalizacji takie jak ostatnim liście powyżej, które różnią się między Android i iPhone ? Gdzie różnią się, jaka jest najlepsza strategia? Po prostu użyj wartości, która pasuje do obu światów? (Dokładne dostrojenie takich detali w czasie pracy w zależności od platformy może być nieco przesadzone?)
Nie jestem ekspertem w tej dziedzinie, ale optymalizacja AFAIK zależy głównie od układu scalonego. IPhony są (nieco) bardziej spójne w układach GPU, ale w Androidzie możesz mieć kilka układów GPU: Adreno 2xx, PowerVR SGXxxx, Malixxx, Tegra2. Istnieją również różnice w funkcjonalności. Ponadto, tylko z ciekawości? Dlaczego używasz wersji 1.1, a nie 2.0? Myślę, że za pomocą programowalnych shaderów można lepiej zoptymalizować kod (i oczywiście aplikacja obsługuje mniej urządzeń ... ale AFAIK w dzisiejszych czasach każde urządzenie z Androidem obsługuje suporty 2.0) –
Jeśli chodzi o korzystanie z OpenGL ES1.1: chodzi o obsługę starszych urządzeń . Dobra uwaga na temat chipsetów! – MeinHeinlein