Bezeichnung
BeginDoubleBuffer -- startet Doppelpufferung für das aktuelle Display (V2.0)
Übersicht
BeginDoubleBuffer([hardware])
Beschreibung
Dieser Befehl setzt das aktuelle Display in den Doppelpuffermodus. Die Grafiken, die nach diesem Befehl gezeichnet wurden, werden nicht sichtbar sein, bis Sie den Befehl Flip() aufrufen. Doppelpufferung wird verwendet, um sichtbare Bildschirmaktualisierungen für den Benutzer zu vermeiden. Wie der Name schon sagt, haben Sie zwei Puffer im Doppelpuffermodus: Einen Vordergrundpuffer (für den Benutzer sichtbar) und einen Hintergrundpuffer (im Speicher). Ihre Bildschirmaktualisierungen werden immer im Hintergrundpuffer (Speicher) gezeichnet und wenn Sie damit fertig sind, rufen Sie den Befehl Flip() auf, um den Hintergrundpuffer nach vorne zu holen. Danach können Sie die nächsten Aktualisierungen vornehmen. Diese Technik sorgt dafür, dass kein Flackern sichtbar wird, weil Flip() immer das gesamte Display in einem Rutsch aktualisieren wird.

Doppelpuffer sind äußerst nützlich, wenn viele Grafiken in einer Bildschirmaktualisierung gezeichnet werden müssen. Wenn Sie nur ein kleines Bild bewegen müssen, sollten Sie besser Sprites verwenden, weil es damit schneller geht. Denken Sie daran, dass ein doppelt gepuffertes Display immer den ganzen Bildschirm aktualisiert. Wenn Sie also eine Anwendung in 640x480 bei 25 fps läuft, wird es etwas Arbeit für Hollywood bedeuten, weil ein Bildschirm von 640x480 25-mal in der Sekunde gezeichnet werden muss.

Doppelpuffer werden auf einer Pro-Display Basis installiert. Wenn Sie also BeginDoubleBuffer() aufrufen, wird nur das aktuell ausgewählte Display in den Doppelpuffermodus versetzt werden. Nicht alle Displays werden somit doppelt gepuffert! Wenn Sie alle Ihre Displays doppelt gepuffert haben wollen, dann müssen Sie BeginDoubleBuffer() für jedes einzelne Ihrer Display aufrufen.

Es gelten aber bestimmte Einschränkungen:

Ab Hollywood 5.0, gibt es das neue optionale Argument hardware, womit Sie Hardwaredoppelpuffer aktivieren können. Auf unterstützten Systemen ist dies viel schneller als Softwaredoppelpufferung, da es vollständig im Videospeicher ausgeführt wird, der die GPU zum Zeichnen verwendet. Es gibt aber einige Einschränkungen: Wenn Sie einen Hardwaredoppelpuffer verwenden, sollten Sie wann immer möglich Hardware-Pinsel benutzen. Alle anderen Zeichnungsbefehle sind viel langsamer! Nur bei Verwendung von Hardware-Pinsel können Sie eine vollständig beschleunigte Hardwarezeichnung erhalten. Mit normalen Zeichnungsbefehlen kann Hardwaredoppelpuffer sogar langsamer sein, als es mit Softwaredoppelpuffer wäre. Dies ist insbesondere dann bei Grafiken der Fall, die einen Alphakanal verwenden, z.B. Antialiasing-Text oder Vektorformen. Daher sollten Sie versuchen, wann immer möglich Hardware-Pinsel zu verwenden, wenn Sie mit einem Hardwaredoppelpuffer arbeiten. Siehe Informationen über Hardware-Pinsel für Details.

Bitte beachten Sie, dass derzeit Hardware-Doppelpufferung nur auf AmigaOS und Android unterstützt wird und standardmäßig voreingestellt ist. Allerdings können Plugins, die ein Display-Adaptermodul installieren, auch Hardware-Doppelpuffer für ihr Display-Adaptermodul unterstützen. In diesem Fall können Sie auch Hardware-Doppelpuffer auf anderen Systemen verwenden. Zum Beispiel können die GL Galore- und RebelSDL-Plugins Hardware-Doppelpuffer unter Windows, macOS und Linux verwenden. Siehe Vorhandene Plugins für Details.

Bitte beachten Sie auch, dass Hollywood auf einigen Systemen in den Singlepuffermodus fallen könnte. Daher ist es nicht sicher, dass der Befehl Flip() wirklich die Puffer wechselt. Es könnte auch einfach in den einzelnen Puffer zeichnen und dann alle Aktualisierungen wieder darauf anwenden.

Siehe auch EndDoubleBuffer() und Flip().

Eingaben
hardware
optional: Bei True wird Hardwaredoppelpuffer eingeschaltet (voreingestellt ist False, womit Softwaredoppelpuffer verwendet wird) (V5.0)
Beispiel
BeginDoubleBuffer()
CreateBrush(1, 64, 64, #RED)
For k = -64 To 640
   Cls
   DisplayBrush(1, k, #CENTER)
   Flip
Next
EndDoubleBuffer()
Der obige Code bewegt ein rotes Rechteck von links außen nach rechts außen ohne sichtbares Flimmern. Dies ist kein gutes Beispiel, weil wir nur ein kleines Bild bewegen. Es ist eine Menge Aufwand, das ganze 640x480 Display nur für dieses kleine Bild zu aktualisieren, so sollten Sie in diesem Fall besser Sprites verwenden. Denken Sie daran, dass Doppelpufferung nur empfohlen wird, wenn eine Menge Grafiken zu aktualisieren/zeichnen gibt.

Navigation zeigen