Jakie masz wskazówki, aby zwiększyć efektywność OpenGL?
opengl
optimization
thyrgle
źródło
źródło
glStart()/glEnd()
.Obowiązuje tu również standardowa końcówka profilu, profil, profil, chociaż narzędzia są nieco inne.
gDEBugger świetnie pomaga ci zobaczyć dokładnie, co się dzieje pod maską. Jest to jednak drogie.
źródło
Są to odniesienia do dokumentacji Apple na OpenGL, ale każda odrobina pomaga, prawda? ;)
Optymalizacja wydajności OpenGL: podstawy
optymalizacji przepustowości danych OpenGL w systemie OS X
(Ten ostatni to przykładowa aplikacja)
Optymalizacja wierzchołków
Istnieje również bardzo duża liczba filmów na ten temat (także od Apple), które mówią o rozszerzeniach OpenGL. Niektóre z nich są specyficzne dla systemu OS X, ale kilka innych jest bardziej uogólnionych i najprawdopodobniej można je zastosować w systemach Windows i Linux.
Możesz znaleźć filmy tutaj . Jednak do ich przeglądania potrzebujesz iTunes i konta Apple (ale są bezpłatne!: D)
źródło
Cóż, to naprawdę zależy od tego, co planujesz zrobić, ale oto podstawy:
Twój procesor jest bardzo cenny, podczas gdy twój GPU jest głodną bestią. Odsuń jak najwięcej do GPU. Obecnie możesz to zrobić dzięki doskonałym bibliotekom, takim jak OpenCL, CUDA i Thrust.
Zrób oświetlenie w shaderze. Pomoże to nie tylko zachować zdrowie psychiczne, ale pozwoli też na bardzo fajne rzeczy, takie jak shadery i odroczone oświetlenie .
Cząsteczki ssą. Nawet podczas korzystania ze sprite'ów punktowych OpenGL.
źródło
Zminimalizuj zmiany stanu. Na wielu platformach każda zmiana stanu potencjalnie opróżnia rurociąg. O wiele lepiej jest łączyć podobne produkty razem i raz zmieniać stan.
źródło
Prosta wkładka, która stosuje ubranie na tylnej powierzchni. Jest to doskonałe do zmniejszania liczby wielokątów. Zobacz także wybijanie frustum / okluzji w celu zmniejszenia liczby zliczeń.
Kolejną rzeczą do rozważenia jest SIMD dla wektorów i czwartorzędów (najczęściej używanych w obrotach aparatu). Jeśli nie chcesz zadzierać z ASM, sprawdź libSIMD, który jest świetną biblioteką do obsługi SIMD w C.
źródło
Nie używaj glGet *, gdy masz dostęp do zmiennych lokalnych, np .:
Te połączenia są bardzo wolne
Przenieś nieużywane rzeczy poza glBegin - klauzula glEnd (czy to glColor, glNormal lub cokolwiek innego), jeśli nie zmienia się w środku. OpenGL jest maszyną stanu, używa ostatniej wartości.
źródło
Kluczem jest minimalizacja poleceń OpenGL. Musisz więc spakować wszystkie polecenia do rysowania. W przypadku gier 2d dobrym pomysłem jest użycie Altas Texture i narysowanie wszystkich duszków o tej samej teksturze w jednym poleceniu opengl.
źródło
Partia, partia, partia !! (Ab) użyj GPU, aby renderować jak najwięcej w każdym losowaniu. Gry są w większości ograniczone ilością zmian stanu, a nie ilością trójkątów.
źródło