Doppelpufferung

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Doublebuffer)
Wechseln zu: Navigation, Suche

Doppelpufferung (englisch double buffering) beschreibt ein Konzept in der Computergrafik, bei dem der Framebuffer (Bildspeicher) des Video-RAM bei Grafikkarten in zwei Bereiche unterteilt wird. Ziel des Verfahrens ist die Gewährleistung einer kontinuierlichen Bildfrequenz ohne Flackern.

Bevor Doppelpufferung eingeführt wurde, unterteilte man den Framebuffer nicht. Bildberechnung und Monitorausgabe fanden also parallel statt. Damit schwankte die Bildfrequenz je nach Szenenkomplexität und das Bild flackerte. Dies entsteht, wenn während der Ausgabe noch in den gleichen Framebuffer geschrieben wird.

Funktionsweise[Bearbeiten]

Der Framebuffer des Grafikkartenspeichers wird in Front- und Backbuffer unterteilt. Während durch den RAMDAC der Frontbuffer ausgelesen und auf den Bildschirm dargestellt wird, berechnet die GPU im Backbuffer das nächstfolgende Bild. Nach Abschluss dieser Berechnung ist die Ausführung des Swap-Befehls - das ist die Vertauschung der Speicheradressen von Front- und Backbuffer (Page Flip) - abhängig von VSync.

  • Bei deaktiviertem VSync wird der Tausch sofort vollzogen, unabhängig davon, wie weit der RAMDAC mit der Bilddarstellung aus dem Frontbuffer ist. Der Kathodenstrahl, der das Monitorbild erzeugt, beginnt aber nicht von vorn. Dieser fährt an der Stelle fort, wo er vor dem Puffertausch aufgehört hat. Das führt dazu, dass ein auf dem Monitor dargestelltes Bild zum Teil aus mehreren aufeinanderfolgenden Teilbildern zusammensetzt ist. Diesen Effekt nennt man Tearing.
  • Bei aktiviertem VSync wird mit dem Vertauschen solange gewartet, bis der RAMDAC die Darstellung des aktuellen Bildes aus dem Frontbuffer beendet hat. Dies wird mit dem VSync-Signal angezeigt. In der Zwischenzeit kann keine neue Bildberechnung stattfinden, weil die Ergebnisse in keinem freien Puffer abgelegt werden können. Damit wird die Leistungsfähigkeit der Grafikkarte künstlich reduziert. Dieses Problem wird bei der Dreifachpufferung (triple buffering) durch Einführung eines weiteren Backbuffers kompensiert.

Nach Ausführung des Swap-Befehls (dem Tausch von Front- und Backbuffer) beginnt der ganze Zyklus wieder von vorn.

Vor- und Nachteile von Doppelpufferung[Bearbeiten]

Vorteile[Bearbeiten]

  • flüssiger und ruckelfreier Bildaufbau
  • geringere Latenz als bei Drei- oder Vierfachpufferung

Nachteile[Bearbeiten]

  • deaktiviertes VSync führt zu Tearing, insbesondere wenn die Bildwiederholrate des Monitors niedrig ist, die Grafikkarte jedoch eine hohe Framerate erreicht
  • aktiviertes VSync führt zum Teil zu hohem Performanzverlust
  • doppelte Framebuffergröße gegenüber einfacher Pufferung

Einsatzgebiete[Bearbeiten]

Microsoft Windows[Bearbeiten]

Wenn in Microsoft Windows das Windows Aero Skin ausgewählt wurde, nutzt der Desktop Window Manager standardmäßig die doppelte Pufferung um Tearing zu verhindern.[1][2]

Wechselpuffertechnik[Bearbeiten]

In anderen Bereichen (vor allem in Echtzeit-Anwendungen) wird die Doppelpufferung als Wechselpuffertechnik bezeichnet. Ein Wechselpuffer entspricht einem Ringpuffer mit zwei Plätzen (Erzeuger-Verbraucher-Problem).

Einzelnachweise[Bearbeiten]

  1. Das Windows Aero-Feature nutzt doppelte Pufferung zum Zeichnen auf dem Bildschirm.
  2. http://blogs.msdn.com/b/greg_schechter/archive/2006/03/19/555087.aspx The DWM avoids window tearing during refresh