OpenGL-Optimierungstipps [geschlossen]

26

Welche Tipps oder Tricks haben Sie, um OpenGL effizienter zu machen?

Thyrgle
quelle

Antworten:

16

Verwenden Sie VBO anstelle von glStart () / glEnd (). Dies spart Zyklen beim Übertragen der Daten in den Speicher der GPU.

MrValdez
quelle
7
Darüber hinaus waren glBegin und glEnd in späteren Überarbeitungen veraltet und wurden in den Versionen 3.x und höher vollständig entfernt (und funktionieren daher nicht). Wenn Sie einen OpenGL 3.x-Kontext anfordern, können Sie diesen nicht vollständig verwenden.
Slurps Mad Rips
DirectX erzwingt dies tatsächlich, es hat kein Äquivalent von glStart()/glEnd().
Ritter666
@SAHChandler Das wusste ich nicht. Ich habe nicht bemerkt, dass es veraltet ist.
MrValdez
3
@SAHChandler: Das ist scheiße! Ich habe all mein Zeichnen mit glBegin () und glEnd () gelernt. Nein !!!
8

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.

Tetrade
quelle
2
Ich wollte nur hinzufügen, dass es jetzt kostenlos ist.
DMan
8

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)

Schlürft Mad Rips
quelle
7

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.

knight666
quelle
6

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.

Dennis Munsie
quelle
4
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.

Krankzinnig
quelle
4

Verwenden Sie glGet * nicht, wenn Sie auf lokale Variablen zugreifen können, z.

  • Fragen Sie die Texturgröße nicht in OpenGL ab, sondern speichern Sie sie beim Laden in Variablen
  • Fragen Sie in OpenGL keine Linienbreiten / Punktgrößen ab, wenn Sie die Änderungen in Ihrer Anwendung speichern können

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.

Kromster sagt Unterstützung Monica
quelle
3

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.

Ellis
quelle
Achtung. Weniger und größere Stapel sind nützlich, aber je nach Zielplattform verringern "zu große" Stapel die Leistung.
Andreas
3

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.

Hannesh
quelle