Probleme mit dem double buffering
Übersicht

Bin ich zu blöd zum programmieren? | ||||||||
---|---|---|---|---|---|---|---|---|
|
||||||||
Insgesamt 32 Stimmen |
CyberdogBetreff: Probleme mit dem double buffering |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Solche Umfragen müssen nicht sein ![]() Vielleicht liegts an dem Delay 500? |
||
CyberdogBetreff: Ic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ne daran liegt's nicht
Hast recht mit der Umfrage! |
||
![]() |
General Alex |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() 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 ![]() Edit Oops ![]() ![]() |
||
- Zuletzt bearbeitet von General Alex am Mi, Mai 19, 2004 15:13, insgesamt einmal bearbeitet
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Cyberdog |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
B+ = BlitzPlus (2D und GUI)
B3D = Blitz3D (2D und 3D) |
||
Cyberdog |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich denk das reicht mir als Antwort!!
Danke euch allen! |
||
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group