OpenGL-Bindung und Beziehungen zwischen Entitäten

12

Dies ist meist eine Dokumentationsfrage. Ich hoffe, dies ist der richtige Ort, um zu fragen, und nicht zum Beispiel Programmierer oder Stackoverflow.

Ich habe die OpenGL-Spezifikation nicht gelesen, kann aber aus Büchern (Red Book) und verschiedenen Tutorials nicht richtig nachvollziehen, wie verschiedene Objekte und Teile der API interagieren und sich beziehen.

Ich weiß zum Beispiel, dass, wenn eine VAO gebunden ist, das Binden eines VBO und das Setzen eines Attributs dazu führt, dass der VBO an die VAO gebunden wird.

Es gibt aber viele Objekte, deren Beziehung variieren kann. Beispielsweise hat der VAO keinerlei Beziehung zum aktuellen Schattierungsprogramm, aber das Ergebnis von Zeichenoperationen kann von beiden abhängig sein.

Unter all den verschiedenen OpenGL-Komponenten sehe ich einige Relationen wie A-Bindungen an B oder A-und-B-werden von C verwendet. All diese Beziehungen bestimmen gemeinsam, wie man den Zustand des Kontexts verändern kann, wie man Dinge verändern kann, wie man Dinge zusammen speichern und optimieren kann.

Ich suche nach Ressourcen, die nur diese Beziehungen erklären . Wie ein UML-Diagramm, ein Graph oder sogar ein Textdokument, das sich nicht auf die Aufrufe konzentriert, sondern auf kompakte Weise beschreibt, wie die verschiedenen OpenGL-Komponenten interagieren und sich aufeinander beziehen.

Wissen Sie, wo Sie eine solche Ressource finden?

AkiRoss
quelle
3
Gute Frage. Ich habe meine gesamte OpenGL-Bibliothek / Engine ohne eine super klare Antwort auf diese Schlüsselfrage zum Laufen gebracht.
David van Brink
1
Das Binden einer VBO bindet sie nicht an eine VAO. Dies wird stattdessen mit erreicht glVertexAttribPointer(). Das Diagramm für OpenGL-Objekte wäre recht flach und einfach, es gibt tatsächlich nicht mehr als eine Handvoll verschiedener Objekte in OpenGL. VAOs verwenden Puffer für Attribute. Puffertexturen werden durch Puffer gesichert. Framebuffer haben Texturanhänge. Zeichenbefehle verwenden den aktuellen VAO, das aktuelle Programm, den aktuellen Framebuffer, die aktuellen Sampler-Einstellungen und den aktuellen Indexpuffer / indirekten Puffer. Sie könnten das Diagramm wahrscheinlich selbst zeichnen.
Dietrich Epp
1
Entschuldigung, ich werde kein Bild für dich zeichnen.
Dietrich Epp
2
Gute Frage, und von wo aus ich stehe, viel Glück, eine umfassende Antwort zu bekommen, ohne ein beträchtliches Kopfgeld darauf zu setzen.
Ingenieur
2
Das Design von OpenGL ist ein gutes Argument dafür, warum Sie keine globalen Variablen verwenden sollten ;)(die gesamte API ist ein einziges Durcheinander globaler Daten)
glampert

Antworten:

7

Also habe ich versucht, mein eigenes Diagramm zu malen. Es ist nicht umfassend, vor allem, weil ich momentan nicht an einigen Dingen interessiert bin, sondern auch, weil ich wollte, dass es lesbar ist (auch wenn es kein formal festgelegtes Diagramm ist, denke ich, dass es leicht lesbar sein sollte).

Da dies für einige Leute von Interesse zu sein scheint, möchte ich es hier teilen, um Feedback zu erhalten und es überprüfen zu lassen. Ich habe das OpenGL-Wiki als Referenz verwendet, um die Richtigkeit zu überprüfen, aber möglicherweise habe ich Fehler eingeführt.

Wenn Ihnen die zur Verfügung gestellten Informationen nicht ausreichen oder ich wichtige Zusammenhänge ausgelassen habe, die es wert sind, in das Diagramm aufgenommen zu werden, können Sie sie gerne vorschlagen, und ich werde versuchen, sie auf dem neuesten Stand zu halten.

OpenGL-Bindungsbeziehungsdiagramm

Auch hier können Sie Fehler, Probleme oder Vorschläge melden. Wir heißen Sie herzlich willkommen.

BEARBEITEN

  1. Die Beziehung zwischen Zeichnung und Attributen fehlte: Attribute müssen aktiviert sein, damit sie beim Rendern wirksam werden
AkiRoss
quelle