Doppelpufferung: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Komplettüberarbeitung)
K (Gibt es Nachteile?: Hinweis zum Speicherverbrauch und Z-Stencilbuffer hinzugefügt)
 
(7 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
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''' (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 ==
 
== 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.
+
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 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.
+
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 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.
+
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? ==
  
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.
+
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 jedoch üblicherweise ausreichend viel Speicher zur Verfügung, so daß keinesfalls auf die Vorteile von Doppelpufferung verzichten werden sollte.
+
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