Was ist eine Swap chain? (Direct3D 9)

Eine Swap chain ist eine Sammlung von Puffern, die zum Anzeigen von Frames für den Benutzer verwendet werden. Jedes Mal, wenn eine Anwendung einen neuen Frame zur Anzeige anzeigt, tritt der erste Puffer in der Swapchain an die Stelle des angezeigten Puffers. Dieser Vorgang wird als Swapping oder Flipping bezeichnet.

Ein Grafikkarte enthält einen Zeiger auf eine Oberfläche, die das auf dem Monitor angezeigte Bild darstellt, das als Frontpuffer bezeichnet wird. Wenn der Monitor aktualisiert wird, sendet die Grafik Karte den Inhalt des Frontpuffers an den Monitor, um angezeigt zu werden. Dies führt jedoch zu einem Problem beim Rendern von Echtzeitgrafiken. Der Kern des Problems ist, dass die Aktualisierungsraten der Monitore im Vergleich zum Rest des Computers sehr langsam sind. Gängige Aktualisierungsraten reichen von 60 Hz (60 Mal pro Sekunde) bis 100 Hz. Wenn Ihre Anwendung den vorderen Puffer aktualisiert, während sich der Monitor in der Mitte einer Aktualisierung befindet, wird das angezeigte Bild halbiert, wobei die obere Hälfte des Displays das alte Bild und die untere Hälfte das neue Bild enthält. Dieses Problem wird als Tearing bezeichnet.

Direct3D implementiert zwei Optionen, um Einreißen zu vermeiden:

  • Eine Option, um nur Updates des Monitors für den Vorgang "Vertikales Retrace" (oder vertikale Synchronisierung) zuzulassen. Ein Monitor aktualisiert in der Regel sein Bild, indem er einen Lichtnadel horizontal bewegt, Zickzack von oben links auf dem Monitor und unten rechts endet. Wenn der Lichtstift den unteren Rand erreicht, kalibriert der Monitor den Lichtstift neu, indem er ihn nach links oben zurückbewegt, sodass der Prozess erneut gestartet werden kann. Diese Neukalibrierung wird als vertikale Synchronisierung bezeichnet. Während einer vertikalen Synchronisierung zeichnet der Monitor nichts, sodass eine Aktualisierung des Frontpuffers erst angezeigt wird, wenn der Monitor wieder zu zeichnen beginnt. Die vertikale Synchronisierung ist relativ langsam. allerdings nicht langsam genug, um eine komplexe Szene während des Wartens zu rendern. Was benötigt wird, um Einreißen zu vermeiden und komplexe Szenen rendern zu können, ist ein Prozess, der als Zurückpufferung bezeichnet wird.
  • Eine Option, um eine Technik namens Back buffering zu verwenden. Das Back buffering ist der Prozess zum Zeichnen einer Szene auf eine Off-Screen-Oberfläche, die als Backpuffer bezeichnet wird. Beachten Sie, dass jede andere Oberfläche als der Frontpuffer als Off-Screen-Oberfläche bezeichnet wird, da sie vom Monitor nie direkt angezeigt wird. Mithilfe eines Rückpuffers kann eine Anwendung eine Szene rendern, wenn sich das System im Leerlauf befindet (d. h. keine Windows-Nachrichten warten), ohne die Aktualisierungsrate des Monitors berücksichtigen zu müssen. Das Zurückpuffern führt zu einer zusätzlichen Komplikation, wie und wann der Backpuffer auf den vorderen Puffer verschoben werden soll.

Der Prozess des Verschiebens des Backpuffers in den vorderen Puffer wird als Surface Flipping bezeichnet. Da die Grafik Karte einfach einen Zeiger auf eine Oberfläche verwendet, um den vorderen Puffer darzustellen, ist nur eine einfache Zeigeränderung erforderlich, um den Backpuffer auf den vorderen Puffer festzulegen. Wenn eine Anwendung Direct3D auffragt, den Backpuffer dem Frontpuffer zu präsentieren, "kippt" Direct3D einfach die beiden Oberflächenzeiger. Das Ergebnis ist, dass der Backpuffer jetzt der neue Frontpuffer und der alte Frontpuffer der neue Backpuffer ist. Eine Oberflächendrehung wird aufgerufen, wenn eine Anwendung das Direct3D-Gerät auffragt, den Rückpuffer zu präsentieren. Direct3D kann jedoch so eingerichtet werden, dass die Anforderungen in die Warteschlange gestellt werden, bis eine vertikale Synchronisierung erfolgt. Diese Option wird als Präsentationsintervall des Direct3D-Geräts bezeichnet. Beachten Sie, dass die Daten im neuen Backpuffer möglicherweise nicht wiederverwendbar sind, je nachdem, wie eine Anwendung angibt, wie Direct3D das Spiegeln von Oberflächen behandeln soll. Surface Flipping ist der Schlüssel in Multimedia-, Animations- und Spielsoftware. es entspricht der Art, wie Sie Animationen mit einem Papierpad ausführen können. Auf jeder Seite ändert der Künstler die Figuren geringfügig, sodass die Zeichnung beim schnellen Umblättern zwischen den Blättern animiert erscheint.

Direct3D-Oberflächen

Flipping Surfaces (Direct3D 9)