Probleme mit dem double buffering

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Bin ich zu blöd zum programmieren?
ja 78% 78% 25 Stimmen
nein 21% 21% 7 Stimmen
Insgesamt 32 Stimmen
 

Cyberdog

Betreff: Probleme mit dem double buffering

BeitragMi, Mai 19, 2004 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich schmöker mich gerade durch das Buch von René. Jetzt hab ich allerdings ein kleines Problem im Grafikmodus. Wenn ich Graphics x,x,x,x voranstelle kann ich irgendwie kein backbuffer mehr erzeugen
B.s.P

SetBuffer BackBuffer()
Cls
Line 200,200,250,200
Delay 5000
Flip
WaitKey

Hier wird das Puffer ganz normal erzeugt und es dauert 5s bis der Strich auftaucht
Graphics 640,480,16,2
SetBuffer BackBuffer()
Cls
Line 200,200,250,200
Delay 5000
Flip
WaitKey

Hier taucht der Strich sofort Auf!

Bitte helft mir!!!!
 

Edlothiol

BeitragMi, Mai 19, 2004 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Solche Umfragen müssen nicht sein Wink
Vielleicht liegts an dem Delay 500?
 

Cyberdog

Betreff: Ic

BeitragMi, Mai 19, 2004 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne daran liegt's nicht
Hast recht mit der Umfrage!

General Alex

BeitragMi, Mai 19, 2004 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Confused ...
Wenn du nur eine Linie anzeigst, brauchst du doch kein Doublebuffering! Aber wenn du dennoch willst, dann mach das so:
Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()
t = MilliSecs()
Repeat
Cls
Line 200,200,250,200
Flip
Until MilliSecs() > t + 5000
End

Ich weiss, das ist sch****e kompliziert, aber ich würde auf "Delay" verzichten, weil es primitiv ist.
Hier mal die Erklärung:
Der Variable t wird MilliSecs() zugewiesen (Zeit in Millisekunden seit dem Start von Windows). Danach wird die Linie in gezeichnet und zwar immer wieder, bis der jetztige Wert MilliSecs() grösser ist als t (vorheriger MilliSecs()) plus 5'000 Millisekunden.

MfG
Alex Very Happy

Edit
Oops Mad , ich dachte, du willst, das der Strich nach 5 Sekunden verschwindet - nein, du willst, das er nach 5 Sekunden auftaucht Evil or Very Mad ...
  • Zuletzt bearbeitet von General Alex am Mi, Mai 19, 2004 15:13, insgesamt einmal bearbeitet

Abrexxes

BeitragMi, Mai 19, 2004 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf was für einer Gurke bist du denn unterwegs.

Kann es sein das dein Rechner bei allem was über 800*600 schon murt?
Hast du B+ oder B3D?

Also ein bischen Auskunftsfreudiger musst du schon sein.

cu Linux

bruZard

BeitragMi, Mai 19, 2004 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Graphics 640,480,16,2
SetBuffer BackBuffer()
Cls
Line 200,200,250,200
Delay 5000 ;<--------- HIER
Flip
WaitKey

Logisch dauert es 5seks bis die Linie angezeigt wird du Nase ....
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

General Alex

BeitragMi, Mai 19, 2004 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt mal richtig:
Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()
t = MilliSecs()
Repeat
  If MilliSecs() > t + 5000 Then
    Cls
    Line 320,240,640,240
    Flip
  EndIf
Until KeyHit(1)
End

Erklärung: Eigentlich fast das selbe, es zeichnet jedoch die Linie erst, wenn 5 Sekunden vorbei sind. Verlassen kannst du das Programm mit [Esc]. Bedenke, dass du für horizontale/vertikale Linien auch "Rect" benutzen kannst, das ist schneller als "Line".

Edit
@bruzard: Beruhige dich Mad !
 

Cyberdog

BeitragMi, Mai 19, 2004 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Linux hat Folgendes geschrieben:
Auf was für einer Gurke bist du denn unterwegs.

Kann es sein das dein Rechner bei allem was über 800*600 schon murt?
Hast du B+ oder B3D?

Also ein bischen Auskunftsfreudiger musst du schon sein.

cu Linux


WAS ZUM TEUFEL IST B+ und B3D

Vielleicht der Compiler? Ich hab die Demo vom 2Der
 

Cyberdog

BeitragMi, Mai 19, 2004 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Linux hat Folgendes geschrieben:
Auf was für einer Gurke bist du denn unterwegs.

Kann es sein das dein Rechner bei allem was über 800*600 schon murt?
Hast du B+ oder B3D?

Also ein bischen Auskunftsfreudiger musst du schon sein.

cu Linux


WAS ZUM TEUFEL IST B+ und B3D

Vielleicht der Compiler? Ich hab die Demo vom 2Der

General Alex

BeitragMi, Mai 19, 2004 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
B+ = BlitzPlus (2D und GUI)
B3D = Blitz3D (2D und 3D)
 

Cyberdog

BeitragMi, Mai 19, 2004 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
General-Alex hat Folgendes geschrieben:
Jetzt mal richtig:
Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()
t = MilliSecs()
Repeat
  If MilliSecs() > t + 5000 Then
    Cls
    Line 320,240,640,240
    Flip
  EndIf
Until KeyHit(1)
End

Erklärung: Eigentlich fast das selbe, es zeichnet jedoch die Linie erst, wenn 5 Sekunden vorbei sind. Verlassen kannst du das Programm mit [Esc]. Bedenke, dass du für horizontale/vertikale Linien auch "Rect" benutzen kannst, das ist schneller als "Line".

Edit
@bruzard: Beruhige dich Mad !


Sorry aber ich bin grad im Kapitel Buffering und hab bloß rumprobiert!!! Ich find ja uach schwachsinnig einen Strich zu Buffern!
Delay 5000 hab ich nur genommen um das flippen zu sehen
 

Cyberdog

BeitragMi, Mai 19, 2004 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
bruZard hat Folgendes geschrieben:
Graphics 640,480,16,2
SetBuffer BackBuffer()
Cls
Line 200,200,250,200
Delay 5000 ;<--------- HIER
Flip
WaitKey

Logisch dauert es 5seks bis die Linie angezeigt wird du Nase ....


Bei mir leider nicht du Ohr. Bei mir kommt der Strich definitiv SOFORT. Wenn ich Graphics weglasse dann nicht. WARUM? das ist mein Problem
 

Edlothiol

BeitragMi, Mai 19, 2004 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Macht man statt Fenster Vollbild rein, dauerts fünf Sekunden... Ansonsten ist es bei mir das Gleiche wie bei Cyberdog. Scheint an Windows zu liegen, das steuert ja das Doublebuffering im Fenstermodus. Komisch ist nur, dass es ohne Graphics funzt...

Gossi

BeitragMi, Mai 19, 2004 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Es liegt am Fenstermodus. Im Vollbild dauert es wie gewollt 5 Sekunden bis zum Flip. Im Fenster kommt die Linie sofort. Wie das sein kann, weiß ich aber auch nicht!

edit: grml ganz knap zu spät...
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.
 

Cyberdog

BeitragMi, Mai 19, 2004 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denk das reicht mir als Antwort!!

Danke euch allen!

Abrexxes

BeitragMi, Mai 19, 2004 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Gossi hat Folgendes geschrieben:
. Wie das sein kann, weiß ich aber auch nicht!


Ganz einfach.Im Vollbildmodus wird der aktuelle Inhalt des Bildschirms gespeichert und das Bild gelöscht. Anschliessend wird der gelöschte Inhalt an die Graka übergeben.Das dauert halt.

Umgedreht daselbe,wird das Program beendet ,wird der aktuelle Bildschirm durch den gespeicherten ersetzt und upgedatet,auch das dauert einen Moment.

Im Fenstermodus werden nur die aktuellen Daten (Fenster) an die Graka übergeben und der aktuelle Inhalt gepuffert (Windowed).Das geht natürlich fix da die Graka ja eh nix anderes macht.

Bei einem Auflösungswechsel muss der Inhalt gespeichert werden ,und der neue Bildschirm initialisiert werden,auch das nimmt Zeit in anspruch.

Gossi

BeitragMi, Mai 19, 2004 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@Linux:

Es geht ja nicht um den Verzögerungsmoment. Es geht darum, dass im Fenstermodus die Linie zu sehen ist, obwohl sie in den BackBuffer gezeichnet wurde. Erst durch ein FLip sollte sie zu sehen sein, aber der Befehl kommt erst nach 5 Sekunden. Die Linie ist aber sofort zu sehen.

Aber jetzt bin ich noch mehr verwirrt. Wie du das sagst, klingt es, als wäre das Programm im Fenster schneller als im Vollbild. Ich habe aber genau umgekehrte Erfahrungen gemacht!?
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

Abrexxes

BeitragMi, Mai 19, 2004 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Fenster ist nur schneller einsatzbereit als der Vollbildmodus,in der Ausführung ist der Vollbildmodus immer schneller.

cu Linux

PS:Bei Windows Fenstern übernimmt Windows das buffern des gesamten Bildschirms .Einzelne Buffer-Commandos von Fenstern werden Ignoriert und kommen nur im Vollbild zum Tragen.Deswegen verzichtet B+ ja auch komplett auf den Buffer und zeichnet sofort auf Front weil ein Buffer in einer GUI Blödsinn(unnütz) ist.
 

zocker2150

BeitragFr, Mai 21, 2004 1:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Um der Verwirrung noch eins draufzusetzen.
Wenn man Graphics hat braucht man auch kein Flip!

Code: [AUSKLAPPEN]
Graphics 640,480,16,2
SetBuffer BackBuffer()
Cls
Line 200,200,250,200
Delay 5000
; Flip ;<------------- Geht auch ohne :)
WaitKey


In René´s Buch steht volgendes:
Zitat:
In BB und BB3D aktiviert Graphics den FrontBuffer. Zeichen und Grafikbefehle arbeiten damit standartmäßig im sichtbaren Bereich. Bei Blitzt Plus wird jedoch dar BackBuffer eingestellt. Das bedeutet: Ohne Flip sehen Sie nichts.

Abrexxes

BeitragFr, Mai 21, 2004 7:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab ja geschrieben das Windows das Buffern im Fenstermodus übernimmt,dann nützt auch FLIP nix und wird logischerweise ignoriert.

In dem Fall funzt aber nix mehr wenn der User auf Vollbild geht,sofern das in einem Menü anwählbar ist.Er sieht dann einen schwarzen Screen Wink

cu Linux

Code: [AUSKLAPPEN]

Graphics 640,480,16,0 ; geht nur ohne FLIP wenn 2 oder 3
SetBuffer BackBuffer()
Cls
Line 200,200,250,200
Delay 5000
; Flip ;<------------- Ohne geht jetzt net bei Modus 0 oder 1
WaitKey

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group