Swapchains
Eine Swapchain ist eine Sammlung von Puffern, die zum Anzeigen von Frames für den Benutzer verwendet werden. Jedes Mal, wenn eine Anwendung einen neuen Frame für die Anzeige darstellt, wird der erste Puffer in der Swapchain anstelle des angezeigten Puffers verwendet. Dieser Vorgang wird als Swapping oder Flipping bezeichnet.
Ein Grafikadapter 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 Grafikkarte den Inhalt des Frontpuffers an den Monitor, der angezeigt werden soll. Dies führt jedoch zu einem "Tearing"-Problem beim Rendern von Echtzeitgrafiken. Das Herzstück des Problems ist, dass die Monitoraktualisierungsraten im Vergleich zum Rest des Computers sehr langsam sind. Allgemeine Aktualisierungsraten reichen von 60 Hz (60 Mal pro Sekunde) bis 100 Hz.
Wenn Die Anwendung den Frontpuffer aktualisiert, während sich der Monitor in der Mitte einer Aktualisierung befindet, wird das angezeigte Bild in der Hälfte mit der oberen Hälfte der Anzeige mit dem alten Bild und der unteren Hälfte mit dem neuen Bild gekürzt. Dieses Problem wird als Reißen bezeichnet.
Vermeiden von Reißen
Direct3D implementiert zwei Optionen, um das Zerreißen zu vermeiden:
Eine Option, um aktualisierungen des Monitors nur für den vertikalen Synchronisierungsvorgang (oder vertikale Synchronisierung) zuzulassen. Ein Monitor aktualisiert sein Bild in der Regel durch horizontales Bewegen eines Lichtnadels, Zickzack vom oberen linken Rand des Monitors und endet am unteren rechten Rand. Wenn der Lichtnadel den unteren Rand erreicht, wird der Monitor neu kalibriert, indem er ihn wieder nach oben links bewegt, sodass der Prozess erneut gestartet werden kann.
Diese Neukalibrierung wird als vertikale Synchronisierung bezeichnet. Während einer vertikalen Synchronisierung zeichnet der Monitor nichts, sodass alle Aktualisierungen des Frontpuffers erst angezeigt werden, wenn der Monitor wieder gezeichnet wird. Die vertikale Synchronisierung ist relativ langsam; allerdings nicht langsam genug, um eine komplexe Szene beim Warten zu rendern. Was erforderlich ist, um das Zerreißen zu vermeiden und komplexe Szenen zu rendern, ist ein Prozess, der als Hintergrundpufferung bezeichnet wird.
Eine Option zum Verwenden einer Technik, die als Hintergrundpufferung bezeichnet wird. Die Hintergrundpufferung ist der Prozess des Zeichnens einer Szene auf eine Offscreen-Oberfläche, die als Hintergrundpuffer bezeichnet wird. Jede andere Oberfläche als der Frontpuffer wird als Offscreen-Oberfläche bezeichnet, da sie nie direkt vom Monitor angezeigt wird.
Mithilfe eines Hintergrundpuffers kann eine Anwendung eine Szene rendern, wenn das System im Leerlauf ist (d. h. keine Windows-Nachrichten warten), ohne die Aktualisierungsrate des Monitors berücksichtigen zu müssen. Die Hintergrundpufferung führt zu einer zusätzlichen Komplikation, wie und wann der Hintergrundpuffer in den Frontpuffer verschoben werden soll.
Surface Flipping
Der Prozess des Verschiebens des Hintergrundpuffers in den Frontpuffer wird als Surface Flipping bezeichnet. Da die Grafikkarte einfach einen Zeiger auf eine Oberfläche verwendet, um den Frontpuffer darzustellen, ist eine einfache Zeigeränderung alles, was erforderlich ist, um den Hintergrundpuffer auf den Frontpuffer festzulegen. Wenn eine Anwendung Direct3D auffragt, den Hintergrundpuffer dem Frontpuffer darzustellen, "kippt Direct3D" einfach die beiden Oberflächenzeiger. Das Ergebnis ist, dass der Hintergrundpuffer jetzt der neue Frontpuffer ist, und der alte Frontpuffer ist der neue Hintergrundpuffer.
Ein Surface Flip wird aufgerufen, wenn eine Anwendung das Direct3D-Gerät auffordern, den Hintergrundpuffer darzustellen. 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. Die Daten im neuen Hintergrundpuffer sind möglicherweise nicht wiederverwendbar, je nachdem, wie eine Anwendung angibt, wie Direct3D das Kippen der Oberfläche behandeln soll.
Surface Flipping ist der Schlüssel in Multimedia-, Animations- und Spielsoftware; Es entspricht der Art und Weise, wie Sie Animationen mit einem Polster Papier ausführen können. Auf jeder Seite ändert der Künstler die Figuren leicht, sodass beim schnellen Kippen zwischen Blättern die Zeichnung animiert wird.
Verwandte Themen