SDL: großer Performance gewinn mit doublebuf?
-
Hi!
Man kann bei SDL beim Initialisieren des Grafikmodusses ja Double-Buffering aktivieren.
Ist dies viel schneller als wenn man sein fenster einfach immer mit SDL_UpdateRect neu zeichnet?
Probleme beim doublebuffering gibts ja, wenn man nicht in jedem Frame alles neu zeichnet, wie zB bei einem menü..MfG DasPinsch
-
is schneller. drum gibt es es ja
-
*** schrieb:
is schneller. drum gibt es es ja
Double Buffering ist dafür da das es nicht blinkt oder komische muster gibt ..
nicht um die Performance zu steigern. Es ist langsamer aber das Ergebnis ist besser .. Bei einem Statischen Bild wäre es aber besser es zu deaktivieren.
-
1ntrud0r schrieb:
*** schrieb:
is schneller. drum gibt es es ja
Double Buffering ist dafür da das es nicht blinkt oder komische muster gibt ..
nicht um die Performance zu steigern. Es ist langsamer aber das Ergebnis ist besser .. Bei einem Statischen Bild wäre es aber besser es zu deaktivieren.Genau, es is schneller oder langsamer, je nachdem wieviel Du am Bildschirm neu zeichnest. Wenn Du den ganzen Schirm immer neu zeichnest wirds in der Regel schneller sein. Sofern Hardware-Surfaces (für Double-Buffering bei SDL nötig) von dem System unterstützt werden bzw. die Grafik-Karte entsprechend Speicher hat. Funktioniert bei einem System HW-Surf+Doublebuf so wird in der Regel auch noch mit der Bildschirmfrequenz gesynct u. es sollten keine "Tearing"-Effekte od. ähnl. erscheinen.
lg,
thomm
-
ob es schneller oder langsammer ist hängt davon ab welchen modus du zum wechseln des backbuffers hast und was du zeichnest.
zeichnest du nur z.b. ein kleines icon immer wieder neu, wäre es wohl das schnellste ohne doublebuffer.
zeichnest du eine ne grosse fläche neu ohne dabei alles neu zu zeichnen, weil es eventuell sehr aufwendig wäre das neu zu zeichnen z.b. ein fraktal mit hocher rekursion, wäre doublebuffering mit blocktransfer langsammer als direckt in den screen zu pinseln, aber du würdest starkes flickern unterbinden.
zeichnest du eigentlich alles neu, dann wäre doublebuffering mit bufferswitch am schnellsten. die grafik-cpus haben ja intern cache, und wenn der D/A wandler die gezeichneten sachen nicht sofort darstellen muss, können sie das auch nur im cache belassen bis etwas ausgelagert werden muss (aus platzmangel). in der zeit kann der D/A wandler das monitorsignal aus einem anderen speicherbereich generieren. bei gemischtem zugriffen (grafikprozessor und D/A wandler greifen auf den selben bereich zu), müßte einer warten, das passiert bei doublebuffering ebenfalls nicht... alles in allem bekommst du vielleicht 1%.
doublebuffering kann bei Antialiasing modies eventuell noch besser laufen als Singlebuffering, weil es pixel-compressionen gibt im backbuffer, die aber nicht im frontbuffer aktiviert sein können, weil du sonst fehlerhafte pixel sehen würdest z.b. soll der D/A wandler bei nvidiakarten einige pixel im AA modus verrechnen und deswegen unkomprimierte daten brauchen.
rapso->greets();
-
danke schonmal für die antworten!
Es ist ja bei der SDL so, dass das, was man auf den screen zeichnet, erst sichtbar wird wenn man bestimmte rects updated. Daher flackert es auch beim singlebuffering nicht.