Grundlegende OpenGL-Operation

Das folgende Diagramm veranschaulicht, wie OpenGL Daten verarbeitet. Wie gezeigt, werden Befehle von links eingegeben und durch eine Verarbeitungspipeline fortgesetzt. Einige Befehle geben geometrische Objekte an, die gezeichnet werden sollen, und andere steuern, wie die Objekte während verschiedener Verarbeitungsphasen behandelt werden.

Diagramm der OpenGL-Datenverarbeitungspipelinephasen.

Die Verarbeitungsphasen im grundlegenden OpenGL-Vorgang sind wie folgt:

  • Liste anzeigen Anstatt alle Befehle sofort durch die Pipeline zu durchlaufen, können Sie einige davon zur späteren Verarbeitung in einer Anzeigeliste sammeln.

  • Evaluator Die Auswertungsphase der Verarbeitung bietet eine effiziente Möglichkeit, die Kurven- und Oberflächengeometrie durch Auswertung polynomischer Befehle von Eingabewerten zu nähern.

  • Vorgänge pro Scheitelpunkt und primitive Assembly OpenGL verarbeitet geometrische Grundwerte, Liniensegmente und Polygone, die alle durch Scheitelpunkte beschrieben werden. Scheitelpunkte werden transformiert und beleuchtet, und Grundtypen werden zur Vorbereitung der Rasterung in den Viewport beschnitten.

  • Rasterung Die Rasterungsphase erzeugt eine Reihe von Framepufferadressen und zugeordneten Werten unter Verwendung einer zweidimensionalen Beschreibung eines Punkts, Liniensegments oder Polygons. Jedes so erzeugte Fragment wird in die vorgänge pro Fragment der letzten Phase eingespeist.

  • Vorgänge pro Fragment Dies sind die letzten Vorgänge, die für die Daten ausgeführt werden, bevor sie als Pixel im Framebuffer gespeichert werden.

    Fragmentbezogene Vorgänge umfassen bedingte Aktualisierungen des Framebuffers basierend auf eingehenden und zuvor gespeicherten z-Werten (für z-Pufferung) und das Mischen eingehender Pixelfarben mit gespeicherten Farben sowie Maskierung und andere logische Vorgänge für Pixelwerte.

Daten können in Form von Pixeln und nicht in Scheitelpunkten eingegeben werden. Daten in Form von Pixeln, z. B. die Beschreibung eines Bilds für die Texturzuordnung, überspringen die oben beschriebene erste Verarbeitungsstufe und werden stattdessen in der Pixeloperationsphase als Pixel verarbeitet. Bei den folgenden Pixelvorgängen sind die Pixeldaten wie folgt:

  • Gespeichert als Texturspeicher zur Verwendung in der Rasterungsphase.
  • Gerastert, wobei die resultierenden Fragmente in den Framebuffer zusammengeführt werden, als ob sie aus geometrischen Daten generiert würden.