Antworten:
Verwenden Sie VBO anstelle von glStart () / glEnd (). Dies spart Zyklen beim Übertragen der Daten in den Speicher der GPU.
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.
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)
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.
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.
glEnable(GL_CULL_FACES);
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.
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.
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.