Flipping Probleme? von ???
Hi,
wie wir alle wissen hat selbst BB ein paar Bugs (die aber im vergleich zu PB harmlos sind), die aber manchmal gravierente folgen haben.

So hört dann auch auf einmal (trotz des [b:fdc5ce94ad]Flip[/b:fdc5ce94ad] Befehls) auf sich die Bildschirm seiten zu wechseln. Was zur folge hat, dass alles flimmert.

Diese kleine Libary macht es euch möglich den Flip befehl weiterhin zu verwenden (also ist leicht einzubauen) und sorgt dafür das es nicht mehr Flimmern wird.

Schaut euch mal, den Code an:
[code:1:fdc5ce94ad]graphics 1024, 768, 16, 1
SetBuffer BackBuffer()
While Not Keyhit(1)
Cls
Color Rnd(255), Rnd(255), Rnd(255)
Rect Rnd(1024), Rnd(768), Rnd(300), Rnd(300), Rnd(1)
Flip
Wend[/code:1:fdc5ce94ad]
hm... das ist doch wie immer normal, oder? hm... Jo...
Aber was ist mir eingefallen, damit solche Flimmer Bugs nicht in BB vorkommen? Hm... ganz einfach:
Statt die Bildschirm seiten zu wechseln, tut man diese einfach Kopieren. Klingt einfach und Simpel, ist aber einfach nur Genial! *ggg*

Hier ist der Code, mit dem ihr den Flip befehl ersetzt:
[code:1:fdc5ce94ad]Function Flip()
CopyRect 0, 0, 1024, 768, 0, 0, BackBuffer(), FrontBuffer()
End Function[/code:1:fdc5ce94ad]

hm.. tja.. und für die Dummen unter euch ( ;) ) habe ich mal den Code zusammengefasst:
[code:1:fdc5ce94ad]Graphics 1024, 768, 16, 1

SetBuffer BackBuffer()
While Not KeyHit(1)
Color Rnd(255), Rnd(255), Rnd(255)
Rect Rnd(1024), Rnd(768), Rnd(300), Rnd(300), Rnd(1)
Flip
Wend

Function Flip()
CopyRect 0, 0, 1024, 768, 0, 0, BackBuffer(), FrontBuffer()
End Function[/code:1:fdc5ce94ad]

So... jetzt dürfte nicht mal mehr eine Alte ELSA Grafikkarte (wießo ich gerade die Alten Elsa Grafikkarte erwähne? Die Tochter Firma hat wieder neu geöffnet! :) ) ein paar mucken machen. *g*

MfG ShadowTurtle
===
von ???
wie siehts mit speed verlust aus ?
===
von ???
Man kann das ja auch optionales Feature in die Konfigurationsdatei deines Spiel mit aufnehmen. Wenn jemand probleme haben sollte soll er darin ein Flag setzten und dann wird anstat Flip diese Funktion ausgeführt.
===
von ???
*g...lach*... jetzt ist ja klar was du für ein effekt du willst:

Du darfst einfach den BackBuffer nicht verwenden...

[code:1:dc3a83369c]
Graphics 1024, 768, 16, 1
While Not KeyHit(1)
Color Rnd(255), Rnd(255), Rnd(255)
Rect Rnd(1024), Rnd(768), Rnd(300), Rnd(300), Rnd(1)
Wend
End
[/code:1:dc3a83369c]

Von der Performens her, ist deine Altanative schlecht...
Sieht man sogar von Auge... Wen du doch mit BackBuffer arbeitest,
so kannst du einfach vor diese Programmteil SetBuffer FrontBuffer() setzen.
Und nachher wieder mit SetBuffer BackBuffer() wieder einschalten...

Also das ist kein BlitzBasic Bug, dass ist ein Denkfehler.
Den mit SetBuffer BackBuffer() arbeitest du automatisch mit 2 Bildschirmseiten.
Wen du die ganze zeit umschaltest und nur ein Teil immer nur auf einer der 2 Seiten zeichnest,
so ist es klar das es immer flimmert...
===
von ???
Es flimmert nicht immer. Es läuft alles Normal... stink Normal!
Aber nach ein paar Minuten fängt es immer an zu Flimmern... zumindest bei mir!

MfG ShadowTurtle
===
von ???
Hi,
in den keller ziehen tuts nicht. Denn das ist ja eine Prozedur, dass von BB ausgeführt wird. Der Programm code tut jeglich dem BB Compiler sagen, das dieser den buffer rüber kopieren muss.

Wenn es durch jeden CopyRect befehl langsamer wird, dann muss es an BB liegen... denn wie gesagt.. die neue Flip routine hat höchstens Drei Zeilen!
Und mit diese Zeile kann man kaum etwas anrichten.

MfG ShadowTurtle
===
von ???
aehm ja das isses doch deine deine FLip routine is in BB gecodet und die von BB in handoptimiertem Assembler, meinste nich das deine Lahmer is ?

Also ich glaub schon, und son fehler kenn ich net, ATI is doch der letze ***** =)
cya
===
von ???
naja... die Flip routine ist auch in ASM gecodet. Der CopyRect befehl aber auch. ;)
Blos wird statt Flip nur noch die anweisung von der function Flip übernommen. Also bei mir macht das nur 1FPs aus!

MfG ShadowTurtle
===
von ???
schon mal versucht deine rects in ein bild (createimage) zu zeichnen und dieses bild auf den buffer zu zeichnen?
[code:1:0fee19ac0f]
screen = createimage(graphicswidth(), graphicsheight())
while not keyhit(1)
{was auch immer in screen gezeichnet wird}
drawblock screen, 0, 0
flip
cls
wend
[/code:1:0fee19ac0f]
===
von ???
Zur Geschwindigkeit : Natürlich ist das Original Flip vielfach schneller (was wahrscheinlich aber nur auf älteren Grafikkarten auffält.) Denn mit Flip wird einfach nur eine Pointer Variable auf eine andere Adresse gesetzt und mit dem Copy Befehl müssen eine Menge Daten (je nach Auflösung) durch den Grafik Speicher geschoben werden !
===
von ???
Wo ist dann der Vorteil von STs Fliproutine???
===
von ???
Der Vorteil ist dass seine GUI bei ihm nun Störungsfrei (Flimmerfrei) läuft.



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: