Triple buffering unter DX



  • Hi, ich arbeite gerade André's Buch durch, und bin gerade beim Page Flipping angelangt, nun meine Frage:

    Reicht es, wenn ich triple buffering anstelle von double buffering verwenden möchte, wenn ich einfach den Backbuffercount der DDSURFACEDESC2 auf 2 setze. also ddsd.dwBackBufferCount = 2 ????

    DasPinsch



  • Weiss das denn keiner??!?!?!



  • Probiers aus und/oder les die Doku ^^



  • Ich habs ja ausprobiert, funzt auch wunderbar, aber wie soll ich wissen, ob ich jetzt tatsächlich 3 surfaces hab?!?!



  • Ja, hast du.



  • das is ja das einfache dran, du musst dir da gar keinen stress machen, das regelt ddraw für dich



  • wieviele surfaces man tatsächlich hat, kann man erkennen, wenn man die puffer nicht löscht und stattdessen etwas hineinzeichnet, das bei jedem frame etwas verschoben dargestellt wird, wie z.b. ein "selbstdesigntes windows-fenster" (es muss etwas sein, das nicht einfarbig ist und eine erkennbare struktur besitzt, könnte auch ein 3d-objekt sein). wenn ihr keine eigenen "fenster" habt, klaut euch eins von windows mit "alt-druck" und macht daraus eine textur, die ihr stattdessen benutzt!

    wenn man das dann mit der maus immer im kreis bewegt, so dass sich die einzelbilder überlagern (ich meine den effekt, der auch manachmal in windows entsteht, wenn der bildschirm nicht aktualisiert wird, dann sieht man ja die einzelnen positionen, an denen das fenster gezeichnet wurde), dann wird alles im frame 1 im vergleich zu frame 2 um eine position vorher verrückt dargestellt und im frame 2 im vergeleich zu frame 3 auch. dadurch ergibt sich eine art laufbewegung der bildes. d.h. man hat den eindruck, als ob sie der inhalt des bildes bewegen würde. aber es ist nur ein simpler optischer trick, der auch gerne bei lichterketten benutzt wird.

    auf jeden fall kann man anhand dieser "animation" erkennen wieviele puffer man hat, das bild sieht bei zwei puffern anders aus als bei drei. wie, ist schwer zu beschreiben testet es einfach mal selber aus. aber im prinzip wirkt die animation bei 3 frames länger und flüssiger, halt so, als ob sie aus mehreren bildern besteht, was ja auch der fall ist.



  • ...achso ich habe noch etwas sehr wichtiges vergessen!

    wenn euer rechner zu schnell sein sollte (z.b. wie bei mir, gf4 ti4600 und pIV 1.6), dann tritt dieser effekt unter umständen nicht ein. weil ihr dann ca. xxxxx frames pro sekunde habt und alle drei frames so schnell hintereinander dargestellt werden, dass sie alle im selben "monitor bild" dargestellt werden, da dieser in der regel "nur" mit 85 Hz läuft.

    um die zu umgehen, bremst man den rechner einfach etwas aus, z.b. indem man 1000 mal einen kleinen text dastellt oder mit nem timer. (allerdings hat wahrscheinlich jeder eine "frame-anzeige" und ein "for(int i=0;i<1000;i++)" vor den draw-befehl zu schreiben geht schneller als ein einen timer zu benutzen)

    ODER:

    das sollte die beste lösung sein; man schaltet einfach vsync ein, dann sieht man es besonders gut. allerdings hat man dann ein viel zu sauber dargestelltes bild und es enstehen keine so schönen effekte wie ohne vsync und einem variablen timer.


Anmelden zum Antworten