Doppelpufferung: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Was passiert dabei?)
(Komplettüberarbeitung)
Zeile 1: Zeile 1:
== Was ist Doppelpufferung? ==
+
Doppelpufferung (''double buffering'') ist eine Technik, um die Darstellung halbfertiger Bilder während dem Zeichnen 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 Grafikkarten-Speicher abgelegt sein. Der aktuelle Inhalt des Grafikkarten-Speicher 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 Bildschirm-Inhalt wird also etwa alle 12,5ms mit dem aktuellen Inhalt des Grafikkarten-Speichers 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 Grafikkarten-Speicher vornehmen und würde der Aufbau des Bildes länger als diese 12,5ms dauern, 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 Bildschirm-Inhalt nicht direkt in den aktuell Grafikkarten-Speicher (''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 daß 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.
 +
 
 +
Auf den aktuellen Standardkarten steht jedoch üblicherweise ausreichend viel Speicher zur Verfügung, so daß keinesfalls auf die Vorteile von Doppelpufferung verzichten werden sollte.

Version vom 1. November 2005, 18:41 Uhr

Doppelpufferung (double buffering) ist eine Technik, um die Darstellung halbfertiger Bilder während dem Zeichnen 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 Grafikkarten-Speicher abgelegt sein. Der aktuelle Inhalt des Grafikkarten-Speicher 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 Bildschirm-Inhalt wird also etwa alle 12,5ms mit dem aktuellen Inhalt des Grafikkarten-Speichers ersetzt.

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

Um dies zu vermeiden, verwendet man Doppelpufferung. Hierbei wird der später darzustellende Bildschirm-Inhalt nicht direkt in den aktuell Grafikkarten-Speicher (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 daß 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.

Auf den aktuellen Standardkarten steht jedoch üblicherweise ausreichend viel Speicher zur Verfügung, so daß keinesfalls auf die Vorteile von Doppelpufferung verzichten werden sollte.