- Dreifachpufferung
-
Die Dreifachpufferung (englisch triple buffering) beschreibt ein Konzept in der Computergrafik, bei dem der Framebuffer des Video-RAM bei Grafikkarten in drei Bereiche unterteilt wird. Ziel des Verfahrens ist es, die bei gleichzeitiger Verwendung von VSync (vertikale Synchronisation) und Doppelpufferung (double buffering) auftretenden Nachteile während des Bildaufbaus zu kompensieren.
Der Unterschied zwischen Doppel- und Dreifachpufferung liegt in der Einteilung des Framebuffers. Während bei der Doppelpufferung der Framebuffer aus zwei Pufferspeichern (Front- und Backbuffer) besteht, sind es derer drei bei der Dreifachpufferung (ein Frontbuffer und zwei Backbuffer).
Inhaltsverzeichnis
Funktionsweise
Im Frontbuffer liegt das Bild, das durch den RAMDAC gerade auf den Bildschirm gebracht wird. Im Backbuffer 1 wird das nächste Bild gerendert (berechnet). Der weitere Ablauf ist davon abhängig, wann der Swap-Befehl umgesetzt wird. Dieser wird von der GPU initiiert, wenn der nächste Frame zur Ausgabe bereitsteht und bewirkt das Vertauschen der Speicheradressen von Front- und Backbuffer (Page Flip).
- Dieser Vorgang entspricht VSync = off
Der Swap-Befehl wird direkt bei Beendigung der Berechnungen im Backbuffer 1 umgesetzt und damit Front- und Backbuffer vertauscht. Dabei kann es zum sogenannten Tearing kommen, bei dem das auf dem Monitor ausgegebene Bild aus u.U. mehreren aufeinanderfolgenden Frames besteht. Der Backbuffer 2 bleibt bei dieser Kombination ungenutzt. Dreifachpufferung ohne VSync ist somit Ressourcenverschwendung. - Dieser Vorgang entspricht VSync = on
Die Berechnungen im Backbuffer 1 sind abgeschlossen und es wurde bereits mit dem Rendern des nächstfolgenden Bildes im Backbuffer 2 begonnen. Jetzt erfolgt die Umsetzung des Swap-Befehls. Der neue Frontbuffer (ehemals Backbuffer 1) enthält das fertig berechnete Bild und wird auf dem Monitor ausgegeben. Im neuen Backbuffer 1 (ehemals Backbuffer 2) findet die Berechnung des nächsten Frames statt. Der neue Backbuffer 2 (ehemals Frontbuffer) wurde gelöscht und steht zur weiteren Benutzung bereit.
Doppelpufferung und VSync
Durch den Einsatz von VSync wird der Swap-Befehl, der Front- und Backbuffer tauscht, so lange nicht umgesetzt, bis das aktuelle Bild aus dem Frontbuffer komplett auf dem Bildschirm dargestellt wurde. Ist die Berechnung des neuen Frames im Backbuffer abgeschlossen, muss die GPU also bis zum nächsten VSync warten, um mit dem nächsten Frame weiterzumachen. Die effektive Rechenzeit pro Bild ist somit immer gleich der oder ein ganzes Vielfaches der Zeit, die der Monitor zum Anzeigen eines Bilds benötigt. Wenn die Bildrate der GPU also zum Beispiel knapp unter der des Monitors liegt, ist die effektive Bildrate nur die Hälfte der Monitorbildrate (da die GPU bei jedem zweiten VSync noch nicht mit dem Rendern des Bilds fertig ist). Wenn sie unter der Hälfte liegt wird sie ein Drittel der Monitorbildrate usw.
Dreifachpufferung und VSync
Durch einen weiteren Backbuffer kann die Bildrate des Monitors von der GPU entkoppelt werden. Wenn ein Bild fertig gestellt ist, muss die GPU nun nicht mehr warten, bis der Swap-Befehl ausgeführt wird, sondern kann direkt im anderen Backbuffer weiterarbeiten. Beim Auftreten des Swap-Befehls werden also die beiden Backbuffer vertauscht, während beim Auftreten von VSync der Frontbuffer und der fertig berechnete Backbuffer vertauscht werden. Es kommt also zu keinem Leistungsverlust gegenüber dem ungepufferten Fall.
Vor- und Nachteile von Dreifachpufferung und VSync
Vorteile
- optimale Bildqualität, da kein Tearing auftritt (grafisches Artefakt, wenn während der Bildausgabe mehrere aufeinander folgende Bilder benutzt werden)
- kein Performanceverlust
Nachteile
- Der Framebuffer ist um bis zu 50% größer als bei Doppelpufferung
- Geringfügig (maximal um 1 Frame) steigende Latenz
Weblinks
- Dieser Vorgang entspricht VSync = off
Wikimedia Foundation.