Vertex Buffer Object
# Vertex Buffer Object

Ein Vertex Buffer Object (VBO) ist eine OpenGL-Funktionalität, die Methoden zum Hochladen von Vertexdaten (Position, Normalenvektor, Farbe usw.) auf das Videogerät für das Rendern im Retained Mode bereitstellt. VBOs bieten erhebliche Leistungssteigerungen gegenüber dem Rendern im Immediate Mode – vor allem deshalb, weil sich die Daten im Speicher des Videogeräts und nicht im Systemspeicher befinden und daher direkt vom Videogerät gerendert werden können. Die VBOs sind äquivalent zu Vertexpuffern in Direct3D.

Die Spezifikation des Vertex-Puffer-Objekts wurde für OpenGL Version 1.5 (im Jahr 2003) vom OpenGL Architecture Review Board standardisiert. Eine ähnliche Funktionalität war vor der Standardisierung von VBOs über die von Nvidia erstellte Erweiterung „vertex array range“ oder ATIs „vertex array object“ Erweiterungen verfügbar.

## Grundlegende VBO-Funktionen

Die folgenden Funktionen bilden den Kern des VBO-Zugriffs und der VBO-Manipulation:

    In OpenGL 1.4:
       glGenBuffersARB(sizei n, uint *buffers)
       Erzeugt ein neues VBO und gibt seine ID-Nummer als vorzeichenlose Ganzzahl zurück. ID 0 ist reserviert.
       glBindBufferARB(enum target, uint buffer)
       Verwendet einen zuvor erstellten Puffer als aktiven VBO.
       glBufferDataARB(enum target, sizeiptrARB size, const void *data, enum usage)
       Daten in den aktiven VBO hochladen.
       glDeleteBuffersARB(sizei n, const uint *buffers)
       Löscht die angegebene Anzahl von VBOs aus dem übergebenen Array oder der VBO-IDs.
    In OpenGL 2.1, OpenGL 3.x und OpenGL 4.x:
       glGenBuffers(sizei n, uint *buffers)
       Erzeugt ein neues VBO und gibt seine ID-Nummer als vorzeichenlose Ganzzahl zurück. ID 0 ist reserviert.
       glBindBuffer(enum target, uint buffer)
       Verwendet einen zuvor erstellten Puffer als aktiven VBO.
       glBufferData(enum target, sizeiptrARB size, const void *data, enum usage)
       Daten in den aktiven VBO hochladen.
       glDeleteBuffers(sizei n, const uint *buffers)
       Löscht die angegebene Anzahl von VBOs aus dem übergebenen Array oder der VBO-IDs.

## Beispiel für die Verwendung

### In C, für OpenGL 3.x und OpenGL 4.x

Vertex Shader:

Fragment Shader:

Main OpenGL Program:

