Meine Werkzeuge
Namensräume
Varianten

Vertex Buffer

Aus indiedev
Wechseln zu: Navigation, Suche

Ein Vertex Buffer ist ein Speicherbereich im Speicher der Grafikkarte, im dem in der Regel Vertices abgelegt sind, aber auch Zusatzdaten wie Texturkoordinaten, Normale, Tangenten usw.. Vertex Buffer sind ein Konzept, dass in den gängigen Render-Frameworks DirectX und OpenGL sowie den darauf basierenden Frameworks, für eine Beschleunigung von Draw-Aufrufen eingesetzt wird.

Die reinen Daten werden dabei im Vertex-Buffer als einfach Bytefolge abgelegt. Damit die Grafikkarte strukturiert auf diese Daten zugreifen kann, ist es notwendig, dass eine Beschreibung erzeugt wird, die der Grafikkarte ermöglicht, die Daten entsprechend ihrer Bedeutung zu interpretieren.

Merke Merke
Nur bei Verwendung eines Vertex Buffer kann die optimale Geschwindigkeit einer Grafikkarte erreicht werden.

Vorteile

Ein Vertex-Buffer beschleunigt die Grafikausgabe von Polygonen aus mehreren Gründen. Wichtigster Grund ist, dass der Vertex-Buffer im Speicher der Grafikkarte liegt. Der Zugriff durch den Prozessor der Grafikkarte (GPU) erfolgt auf den eigenen Speicher deutlich schneller, als auf den Hauptspeicher des Rechners, in dem sich die Grafikkarte befindet. Dies liegt daran, dass die Daten nicht über den PCI-Express (oder früher AGP oder PCI) Bus gelesen werden müssen. Der Zugriff auf den Grafikkartenspeicher erfolgt bei den aktuellsten Grafikkarten mit Geschwindigkeiten weit jenseits der 200GB pro Sekunde. Zum Vergleich: Der kommende PCI-Express 3.0 Standard bietet bei Verwendung von 32x Lanes (doppelt soviele wie heute üblich für Grafikkarten) eine Bandbreite von lediglich ca. 30GB pro Sekunde.

Durch Zugriffsmodifizierer kann der Grafikkarte mitgeteilt werden, wie auf die Daten im Vertex-Buffer zugegriffen wird. So können zum Beispiel Buffer erzeugt werden, die nur einmal beschrieben werden und danach nur noch von der Grafikkarte gelesen werden können. Dadurch ist die Grafikkarte in der Lage den Zugriff auf den Buffer weiter zu optimieren (z.B. durch einen Cache, auf den noch schneller zugegriffen werden kann als auf den Grafikkartenspeicher).

Nachteile

Der Nachteil eines Vertex Buffers liegt in der Natur der Sache. Selbstverständlich benötigt der Vertex Buffer dedizierten Speicher auf der Grafikkarte (oder mit Geschwindigkeitseinbußen im Arbeitsspeicher). Dadurch steigt der Stromverbrauch und die Wärmeentwicklung der Grafikkarte und es werden sowohl aufwendigere (Chip-) Designs, als auch Kühllösungen notwendig. Gerade im Smartphone- und Embedded-Bereich kann dies zu einem Problem werden.

Ein weiterer Nachteil ist selbstverständlich, dass man mit Vertex Buffern ein Stück weit eingeschränkt ist. Der Zugriff kann nur unter gewissen Rahmenbedingungen erfolgen und bevor der Buffer verwendet werden kann, müssen dessen Daten zur Grafikkarte kopiert werden. Dies kostet Zeit und führt zu komplexeren Programmlogiken. Lesender Zugriff auf den Vertex-Buffer ist dabei oft mit zusätzlichen Geschwindigkeitseinbußen belastet.

Der letzte Nachteil ist ein gewisser Verwaltungsoverhead. Je nach Programm können eine größere Menge von Buffern benötigt werden. Diese müssen erzeugt werden und hinter ihnen muss auch wieder aufgeräumt werden. Auch dies führt zu komplexeren Programmlogiken und es benötigt selbstverständlich Rechenzeit.

Alle Nachteile sind jedoch eher gering und werden mehr als Aufgewogen durch die Geschwindigkeitsvorteile, die sich durch einen Vertex-Buffer ergeben.

Tutorials

Navigation
Tutorials und Artikel
Community Project
Werkzeuge