Welche Tipps oder Tricks haben Sie, um OpenGL effizienter zu machen?
opengl
optimization
Thyrgle
quelle
quelle
glStart()/glEnd()
.Die Standardspitze von Profil, Profil, Profil gilt auch hier, obwohl die Werkzeuge leicht unterschiedlich sind.
Mit gDEBugger können Sie genau sehen, was unter der Haube vor sich geht. Es ist allerdings teuer.
quelle
Diese sind aus Apples Dokumentationsreferenzen zu OpenGL, aber jedes bisschen hilft, oder? ;)
OpenGL-Leistungsoptimierung: Die Grundlagen zur
Optimierung des OpenGL-Datendurchsatzes unter OS X
(Letzteres ist eine Beispielanwendung)
Vertex-Optimierung
Es gibt auch eine sehr große Anzahl von Videos zu diesem Thema (auch von Apple), die sich mit OpenGL-Erweiterungen befassen. Einige von ihnen sind OS X-spezifisch, aber einige andere sind allgemeiner und könnten höchstwahrscheinlich auf Windows und Linux angewendet werden.
Die Videos finden Sie hier . Sie benötigen jedoch iTunes und ein Apple-Konto, um sie anzuzeigen (aber sie sind kostenlos!: D)
quelle
Nun, es hängt wirklich davon ab, was Sie vorhaben, aber hier sind die Grundlagen:
Ihre CPU ist sehr kostbar, während Ihre GPU ein hungriges Tier ist. Versetzen Sie so viel wie möglich zur GPU. Heutzutage können Sie dies mit hervorragenden Bibliotheken wie OpenCL, CUDA und Thrust tun.
Machen Sie Ihre Beleuchtung in einem Shader. Dies hilft nicht nur, Ihre geistige Gesundheit zu bewahren, sondern ermöglicht es Ihnen auch, Dinge wie Toon-Shader und verzögertes Licht zu kühlen .
Partikel saugen. Auch bei Verwendung von OpenGL-Point-Sprites.
quelle
Minimieren Sie Ihre Statusänderungen. Auf vielen Plattformen wird bei jeder Statusänderung möglicherweise die Pipeline geleert. Es ist viel besser, ähnliche Artikel zusammen zu stapeln und den Status einmal zu ändern.
quelle
Einfacher Einzeiler, der das Keulen der Rückseite bewirkt. Dies ist hervorragend zum Verringern der Polygonzahl geeignet. Schauen Sie sich auch das Frustum / Occlusion-Keulen an, um die Polyanzahl zu verringern.
Eine andere Sache, die Sie prüfen sollten, ist SIMD für Ihre Vektoren und Quaternionen (meistens bei Kamerarotationen verwendet). Wenn Sie sich nicht mit ASM anlegen möchten, lesen Sie libSIMD, eine großartige Bibliothek für den Umgang mit SIMD in C.
quelle
Verwenden Sie glGet * nicht, wenn Sie auf lokale Variablen zugreifen können, z.
Diese Anrufe sind sehr langsam
Verschieben Sie unbenutztes Material aus der glBegin - glEnd - Klausel (sei es glColor oder glNormal oder irgendetwas anderes), wenn es sich innen nicht ändert. OpenGL ist eine Zustandsmaschine, sie verwendet den letzten Wert.
quelle
OpenGL-Befehle minimieren ist der Schlüssel. Sie müssen also alle Zeichenbefehle stapeln. Für 2D-Spiele ist es eine gute Idee, Altas Texture zu verwenden und alle Sprites mit derselben Textur in einem einzigen Befehl zu zeichnen.
quelle
Charge, Charge, Charge !! (Ab) Verwenden Sie die GPU, um bei jedem Zeichnungsaufruf so viel wie möglich zu rendern. Spiele werden hauptsächlich durch die Anzahl der Zustandsänderungen begrenzt, weniger durch die Anzahl der Dreiecke.
quelle