Odpowiedzi:
Użyj VBO zamiast glStart () / glEnd (). Oszczędza to cykli przesyłania danych do pamięci GPU.
glStart()/glEnd()
.
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)
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.
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.
glEnable(GL_CULL_FACES);
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.
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.
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.