flip 0 ohne flimmern
Übersicht

bjhBetreff: flip 0 ohne flimmern |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo
gibt es eine möglichkeit das flimmern im vollbildmodus vollkommen zu beseitigen? bei mir flimmert es nämlich immer ein bisschen. hilft vielleicht cls ein bisschen dabei? ich hab schon viel rumprobiert und gesucht, aber es flimmert immer. vielleicht muss ich waittimer und flip 0 anders anordnen. ich hoffe jemand kann mir helfen ![]() |
||
![]() |
darth |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
SetBuffer ![]() ![]() Ansonsten solltest du bei der Reihenfolge von Flip ![]() ![]() ![]() MfG, Darth |
||
Diese Signatur ist leer. |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
wird wohl am warscheinlichsten daran liegen, dass du keinen Timer hast und dein Ultra Quadcore prozessor grad 1000 FPS für ein Hello World verballert. ![]() (Also vermute ich jetzt mal ) Siehe dazu Waittimer. Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
![]() alles nein! ![]() meine codes sehen immer so aus: Code: [AUSKLAPPEN] timer=createtimer(60)
graphics3d 1600,1200,32,1 setbuffer backbuffer() while not keyhit(1) renderworld flip waittimer timer wend end aber wenn es so aussieht flimmert es ein bisschen: Code: [AUSKLAPPEN] timer=createtimer(60)
graphics3d 1600,1200,32,1 setbuffer backbuffer() while not keyhit(1) renderworld flip 0 waittimer timer wend end so noobig bin ich auch nicht mehr ![]() ![]() ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach Vsync optional und setzte es standardmäßig auf 0 - dann darf jeder selbst entscheiden, ob er seine CPU aus lastet oder nicht. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
funktioniert das auf anderen rechnern ohne flimmern?
wenn bestimmte dinge nur in einem frame angezeigt werden, dann soll das nicht irgendwie verloren gehen. naja |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist es nicht eher so, dass mit deaktiviertem vsync die GraKa/CPU 100% ausgelastet wird, weil die GraKa einfach vollgas gibt? | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei deaktiviertem vsync (flip(0)) werde so viele Frames berechnet wie geht, darum muss man dass mit einem Timer begrenzen.
Bei aktiviertem vsync (flip(1)) wird immer gewartet, dass der Buffer fertig gezeichnet wurde, so wird Flimmern verhindert aber gleichzeitig belastet BB die CPU zu 100% (weshalb erstere Variante klar zu bevorzugen ist). |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ein fehler in BB, der seit ewigkeiten nicht gefixt wird? | ||
![]() |
Lakorta |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gehört das "Waittimer timer" nicht vor "Flip 0"?
Code: [AUSKLAPPEN] timer=createtimer(60) graphics3d 1600,1200,32,1 setbuffer backbuffer() while not keyhit(1) renderworld waittimer timer ;<--- So flip 0 wend end |
||
--- |
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso sollte das ein Fehler in Blitz sein? Wenn vsync drin ist, synchronisiert sich Blitz eben am Flip mit dem Bildaufbau des Bildschirms. Blitz wartet dann, bis das vorige Frame vollständig übertragen wurde. Das verhindert Tearing, nicht Flimmern! (Wenn vsync-0 flimmert, liegt das wohl eher an nem Bug in B3d/Grakatreiber/Bildschirm). Mit WaitTimer wird Tearing nicht wirklich garantiert ausgeschlossen, besonders wenn es erst nach dem Flip steht.
Kann man drüber streiten, ob dafür 100% CPU-Last benötigt werden. Allerdings gibt es auch irgendwie keinen dringenden Grund, den Spiel-Thread da immer für die paar Millisekunden runterzufahren. Spiele lasten die CPU ziemlich standardmäßig zu 100% aus. (Und zumindest meine Spiele haben eh immer FPS weit unter der Bildwiederholrate das Monitors xD) |
||
MrKeks.net |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil BB offensichtlich mit aktivem warten auf den vsync wartet, anstatt in dieser zeit ans system zurückzugeben und auf den passenden interrupt zu warten, wie es so zimlich alle andern Spiele tun. Hab schon ewig kein Spiel mehr gesehen, was mir auch nur einen Kern permanent auf 100% getrieben hat. | ||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich gehe eigentlich davon aus, dass Flip ziemlich genau auf das Flip von DirectDraw aus DirectX7 abbildet und dessen Flags DDFLIP_WAIT bzw DDFLIP_NOVSYNC oder so nutzt. Das Busywaiting kommt dann von dem und nicht aus Blitz. | ||
MrKeks.net |
bjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich glaub ich nehm jetzt flip 0 und bau ein bisschen blur ein, damit das "ruckeln" ganz übereckt wird.
kann ich irgendetwas bei der grafikkarte umstellen, damit das besser läuft? |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax hat das Problem im D3D7 modus nicht.
Kurzer blick in die quellen des D3D7 Moduls zeigt, dass dort je nach Modus 2 verschiedene dinge passieren. Im Vollbild wird einfach nur die Flip-Methode des IDirectDrawSurface7 aufgerufen. Je nach aktiviertem vsync oder nicht ohne oder mit DDFLIP_NOVSYNC. Im Fenstermodus wird, sofern vsync aktiviert, vor dem flipping die WaitForVerticalBlank methode von DirectDraw7 aufgerufen. Ein einfaches D3D7 Test Programm mit aktivem VSync was ausser FPS messen nix tut läuft hier im vollbild und im fenstermodus sauber mit 60FPS und 0% CPU auslastung. Fazit daraus ist, dass es sich bei BB klar um einen implementierungs-fehler handelt, der recht einfach gefixt werden könne. Vermutlich wartet BB wirklich aktiv auf den vsync, sämmtliche DirectDraw befehle(Die man auch bei Direct3D7 nutzen muss) tun dies auf jeden fall nicht. |
||
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Flimmert es jetzt immernoch?
BlitzBasic: [AUSKLAPPEN] timer=CreateTimer(60) |
||
It's done when it's done. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group