DoubleBuffering

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

BladeRunner

Moderator

Betreff: DoubleBuffering

BeitragSo, Jun 13, 2004 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo- für Anfänger eins der ersten Werkzeuge dass sie beherrschen sollten.

Grundlagen:
Um flüssige Darstellung der Graphik zu erlangen ist es vorteilhaft, dass Bild erst dann auf den Screen zu bringen, wenn es komplett ist, d.h. wenn Hintergrund als auch alle davor bewegten Objekte gezeichnet wurden.
Technisch läuft dass so das BB eigentlich 2 Bilder im Speicher hat:
- den Frontbuffer() -das ist das aktuell auf dem Screen zu sehende Bild,
- und den Backbuffer(), welcher quasi die Zeichenfläche für das nächste Bild darstellt.

Der Befehl flip wechselt die beiden Zeichenflächen blitzschnell aus, d.h. nach Flip befindet sich im Backbuffer das bis eben gezeigte Bild und im Frontbuffer ist nun das im Backbuffer erstellte Bild (und damit auch auf dem Screen).

Nun kann man den Backbuffer löschen und mit dem nächsten Bild befüllen.

Zu Beachten dabei:
Mittels setbuffer() wird BB der Buffer zugewiesen in den alle Zeichenbefehle ausgeführt werden. Fehlt dieser Befehl geht BB vom Frontbuffer aus, was natürlich ungünstig ist.
Daher sollte man das Doublebuffering nach der Graphics-Anweisung mit SetBuffer Backbuffer() einleiten.
Ach ja... dann gibts da noch die "bösen Befehle: Input, Print, Write (und Locate) werden ausschliesslich auf dem Frontbuffer ausgeführt und sind daher für Doublebuffering ungeeignet. Sie sollten daher auch nicht verwendet werden.

Eine hier im Forum schon öfter gestellte Frage ist wie man Bilder "verschwinden" lassen kann- unter DoubleBuffering ist die Erklärung denkbar simpel: Indem man sie nicht mehr in den Backbuffer einzeichnet. Beim nächsten Flip ist nur das Neugezeichnete zu sehen.

Warnung:
Ein gern und oft gemachter Fehler ist es, bei verschiedenen Funktionen /Subprogrammen eigene Cls und Flip einzubauen. Dies wird aber nur selten zum gewünschten Ergebnis führen. Es ist besser das Flip
nur in der Hauptschleife zu verwenden.
Animationen sind zB zeitgesteuert realisierbar (per Millisecs()), eine Schleife mit flip ist tötlich für die Optik Wink

Zum Abschluß das Grundgerüst für Doublebuffering-Programme als Pseudo-Code:

Code: [AUSKLAPPEN]
Graphics
;bilder laden etc...
setbuffer backbuffer()

while not keyhit(1); solange kein ESC gedrückt wird
  Cls ;Backbuffer leeren
  ;hier alle Zeichenbefehle und sonstigen regelmäßig zu wiederholenden Befehle =Hauptschleife
  Flip; Vertauschen der Buffer (=Anzeigen des neuen Bildes)
Wend
end ; genau das ;)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

maximilian

BeitragSo, Jul 04, 2004 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Nett geschrieben. Das Problem: Nach meinen Informationen gibt es Unterschiede zwischen Double Buffering und Page Flipping, wobei Double Buffering "Flip 0" entspricht, und Page Flipping dem normalen Flip mit VSync().

Ich bin mir da auch nicht so sicher, informier dich am besten nochmal.

Grüße,
LordChaos

DivineDominion

BeitragSo, Jul 04, 2004 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Double buffering heißt: Zwei Buffer. Einer der gezeigt wird und einer der, versteckt, bemalt wird. Die werden dann immer ausgetauscht. Was soll der Begriff "Double Buffering" denn mit ausgeschaltetem VSync (Flip 0) zu tun haben? Das macht von den Worten her schon keinen Sinn
christian.tietze@gmail.com - https://christiantietze.de
macOS

Abrexxes

BeitragSo, Jul 04, 2004 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Text von Bladerunner ist korrekt,der von LordChaos nicht richtig.

Erwähnen sollte mann noch das der Backbuffer im Fenstermodus ignoriert wird,hier übernimmt Windows selbst das flippen und syncronisieren des Fensterinhaltes mit dem Rest des Bildschirms.

Flip 0 schaltet die Vsync ab was aber meistens nicht zu empfehlen ist,es ist aber sehr gut geeignet um zu testen welche Reserven mann noch hat (PC-POWER).

maximilian

BeitragSo, Aug 08, 2004 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, ich habe nochmal nachgeschaut, und gemerkt, dass ich Blödsinn geschrieben habe. Hier nochmal die genaue Beschreibung:

Zitat:

Letzendlich wird das fertige Bild auf dem Monitor dargestellt. Dieser Vorgang wird als Page-Flipping bezeichnet. Im Gegensatz zum Double Buffering, wird der Inhalt des Back-Buffers nicht in den Frontbuffer gelegt, sonder die Bereiche werden einfach vertauscht. Somit wird der Front- zum Back-Buffer und umgedreht. In beiden Fällen ist das Bild immer dann erst sichtbar, wenn der Aufbau im Back-Buffer abgeschlossen ist. Damit dieser Vorgang ruckelfrei ist, sollte er mind. 2x in der Sekunde ablaufen. In diesem Zusammenhang wird auch von fps ( Frames per Sekond ).


Quelle:http://www-user.tu-chemnitz.de...itel2.html

Grüße,
LordChaos

PS: Sorry, meine Antwort kam spät, da ich in dieses Sub-Forum sgout wie nie schaue, aber ich denke, dass dieser Thread noch nicht soweit abgerutscht ist, das pushen nervt.

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group