Doppelpufferung: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Was passiert dabei?)
K (Gibt es Nachteile?: Hinweis zum Speicherverbrauch und Z-Stencilbuffer hinzugefügt)
 
(8 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Was ist Doppelpufferung? ==
+
'''Doppelpufferung''' (engl. ''double buffering'') ist eine Technik, um die Darstellung halbfertiger Bilder während des Zeichnens zu vermeiden. Sie kommt dann zum Einsatz, wenn ein Bild nicht als Ganzes erzeugt werden kann, sondern erst durch einzelne Zeichenoperationen schrittweise aufgebaut werden muß.
  
Doppelpufferung nennt man das Verwenden zweier Puffer(Front- bzw. Backbuffer) für das Zeichnen.
+
== Technischer Hintergrund ==
Der Frontbuffer stellt dabei die gerade sichtbare Ausgabe dar, während der Backbuffer gerade mit neuem Inhalt gefüllt wird.
 
  
== Was passiert dabei? ==
+
Sämtliche Inhalte, die auf dem Monitor zu sehen sein sollen, müssen im Grafikkartenspeicher abgelegt sein. Der aktuelle Inhalt des Grafikkartenspeichers wird einstellungsabhängig etwa 80 Mal pro Sekunde von der Grafikkarte neu an den Bildschirm gesendet, der einzig für die Darstellung dieser Informationen zuständig ist. Der Bildschirminhalt wird also etwa alle 12,5ms durch den aktuellen Inhalt des Grafikkartenspeichers ersetzt.
  
Die OpenGL bietet einen Front- und einen Backbuffer. Während der Frontbufferinhalt gerade auf dem Bildschirm dargestellt wird, zeichnet OpenGL im Hintergrund in den Backbuffer. Anschließend werden beide Buffer getauscht. Der Inhalt des Backbuffers ist nun sichtbar, wärend der alte Frontbuffer überzeichnet wird.
+
Würde man beim schrittweisen Aufbauen eines Bildes durch einzelne Zeichenoperationen die dafür nötigen Änderungen direkt im aktuell dargestellten Grafikkartenspeicher vornehmen und würde der Aufbau des Bildes länger als diese 12,5ms dauern, dann würde der Benutzer ein nur teilweise gezeichnetes Bild sehen.
  
Die beiden Buffer werden immer erst dann ausgetauscht, wenn der Backbuffer fertig gefüllt wurde. Somit sieht der Betrachter niemals ein halbfertiges Bild. Dadurch wirkt das Bild ruhiger als Singlepuffer-Bildern bei Volllast.
+
Um dies zu vermeiden, verwendet man Doppelpufferung. Hierbei wird der später darzustellende Bildschirminhalt nicht direkt in den aktuellen Grafikkartenspeicher (''Frontbuffer'') geschrieben, sondern zuerst in einem anderen Speicherbereich der Grafikkarte, der aktuell nicht dargestellt wird, abgelegt (''Backbuffer''). Wurden alle Zeichenoperationen zur Erzeugung des darzustellenden Bildes durchgeführt, wird der Backbuffer mit dem Frontbuffer vertauscht, so dass der Backbuffer zum Frontbuffer wird und dessen Inhalt angezeigt wird. Der Speicherbereich, der zuvor Frontbuffer war, wird jetzt nicht mehr angezeigt und kann als Backbuffer verwendet werden. Ist das nächste Bild fertig gezeichnet, werden die beiden Puffer wieder getaucht.
  
 
== Gibt es Nachteile? ==
 
== Gibt es Nachteile? ==
  
Als Nachteil kann aufgeführt werden, dass eine Doppelpufferung logischerweise 2 Puffer also den doppelten Speicherbereich benötigt. Auf den aktuellen Standardkarten sollte man aber keines Falls auf die Vorteile von Doppelpufferung verzichten müssen.
+
Der einzige Nachteil von Doppelpufferung ist der doppelt so hohe Speicherbedarf, da immer zwei Bilder im Grafikkartenspeicher gehalten werden müssen: Zum einen das aktuell angezeigte Bild, zum anderen das Bild, das erst später gezeigt werden soll und das sich möglicherweise noch im Aufbau befindet. Dies gilt jedoch nur für den Farbpuffer. [[Tiefenpuffer|Tiefen-]] und [[Stencilbuffer]] werden nur einmal für den Backbuffer benötigt.
 +
 
 +
Auf den aktuellen Standardkarten steht zudem üblicherweise ausreichend viel Speicher zur Verfügung, so dass keinesfalls auf die Vorteile von Doppelpufferung verzichtet werden sollte.
 +
 
 +
== Siehe Auch ==
 +
[[SwapBuffers]]<br>
 +
[[Framerate#Triple-Buffering|Triple-Buffering]]<br>
 +
[[V-Sync]]
 +
 
 +
[[Kategorie:Technik_oder_Algorithmus]]

Aktuelle Version vom 27. November 2013, 23:09 Uhr

Doppelpufferung (engl. double buffering) ist eine Technik, um die Darstellung halbfertiger Bilder während des Zeichnens zu vermeiden. Sie kommt dann zum Einsatz, wenn ein Bild nicht als Ganzes erzeugt werden kann, sondern erst durch einzelne Zeichenoperationen schrittweise aufgebaut werden muß.

Technischer Hintergrund

Sämtliche Inhalte, die auf dem Monitor zu sehen sein sollen, müssen im Grafikkartenspeicher abgelegt sein. Der aktuelle Inhalt des Grafikkartenspeichers wird einstellungsabhängig etwa 80 Mal pro Sekunde von der Grafikkarte neu an den Bildschirm gesendet, der einzig für die Darstellung dieser Informationen zuständig ist. Der Bildschirminhalt wird also etwa alle 12,5ms durch den aktuellen Inhalt des Grafikkartenspeichers ersetzt.

Würde man beim schrittweisen Aufbauen eines Bildes durch einzelne Zeichenoperationen die dafür nötigen Änderungen direkt im aktuell dargestellten Grafikkartenspeicher vornehmen und würde der Aufbau des Bildes länger als diese 12,5ms dauern, dann würde der Benutzer ein nur teilweise gezeichnetes Bild sehen.

Um dies zu vermeiden, verwendet man Doppelpufferung. Hierbei wird der später darzustellende Bildschirminhalt nicht direkt in den aktuellen Grafikkartenspeicher (Frontbuffer) geschrieben, sondern zuerst in einem anderen Speicherbereich der Grafikkarte, der aktuell nicht dargestellt wird, abgelegt (Backbuffer). Wurden alle Zeichenoperationen zur Erzeugung des darzustellenden Bildes durchgeführt, wird der Backbuffer mit dem Frontbuffer vertauscht, so dass der Backbuffer zum Frontbuffer wird und dessen Inhalt angezeigt wird. Der Speicherbereich, der zuvor Frontbuffer war, wird jetzt nicht mehr angezeigt und kann als Backbuffer verwendet werden. Ist das nächste Bild fertig gezeichnet, werden die beiden Puffer wieder getaucht.

Gibt es Nachteile?

Der einzige Nachteil von Doppelpufferung ist der doppelt so hohe Speicherbedarf, da immer zwei Bilder im Grafikkartenspeicher gehalten werden müssen: Zum einen das aktuell angezeigte Bild, zum anderen das Bild, das erst später gezeigt werden soll und das sich möglicherweise noch im Aufbau befindet. Dies gilt jedoch nur für den Farbpuffer. Tiefen- und Stencilbuffer werden nur einmal für den Backbuffer benötigt.

Auf den aktuellen Standardkarten steht zudem üblicherweise ausreichend viel Speicher zur Verfügung, so dass keinesfalls auf die Vorteile von Doppelpufferung verzichtet werden sollte.

Siehe Auch

SwapBuffers
Triple-Buffering
V-Sync