Neja nicht ganz.
Du hast quasi immer zwei Pufferspeicher. Bzw. eigentlich nur einen Puffer mit zwei Bereichen.
Du hast einen sogenannten Frontbuffer und einen Backbuffer. Der Frontbuffer ist der, wo das Bild bereit liegt, das sich der Monitor im nächsten Refresh Interval abholen kann. Der Backbuffer ist der, in welcher die Grafikkarte aktiv! das Bild kommende Bild berechnet.
Das heist, beim double buffering hast du nicht zwei fertige Bilder im Pufferbereich, sondern nur eins -> denn am zweiten wird ja gerade aktiv gerechnet.
- double buffering ohne VSync heist -> Frame 1 liegt im Frontbuffer und die GPU berechnet gerade Frame 2 im Backbuffer. Ist sie damit fertig, wandert das Bild aus dem Backbuffer in den Frontbuffer (völlig unabhängig davon, was der Monitor macht) -> es kann zu Tearing kommen, einfach weil der Refreshzyklus des Monitors nicht mit dem Updatezyklus zwischen Back und Frontbuffer übereinstimmt.
- double buffering mit VSync heist -> Frame 1 liegt im Frontbuffer und die GPU berechnet abermals Frame 2 im Backbuffer. Ist sie damit fertig, wartet sie so lange, bis der Monitor das Bild aus dem Frontbuffer fertig dargestellt hat -> erst dann wird das Frame 2 aus dem Backbuffer in den Frontbuffer umgeschaufelt und das Frame 3 kann berechnet werden. Somit wird die FPS Rate auf die Hz Zahl gelockt (oder auf eine Teilmenge ala Hälfte, Drittel usw.) -> der Monitor stellt immer genau ein Frame dar und bekommt das neue genau dann, wenn die Grafikkarte fertig ist. -> sinkt die FPS Rate unter die Hz Zahl, rutscht die Leistung somit auf die Hälfte bzw. ein Drittel der Hz Zahl (oder andere Teilmengen davon) was ein hoher Performanceverlust ist.
- tripple buffering mit VSync heist -> Frame 1 liegt im Frontbuffer, Frame 2 lieg im Backbuffer A und die GPU berechnet gerade Frame 3 im Backbuffer B. -> ist sie damit eher fertig, als der Monitor das Bild aus dem Frontbuffer geholt hat, wird Backbuffer A und B vertauscht. -> der Monitor selbst nimmt dann aber im nächsten Intervall das Bild aus dem Frontbuffer A (also das, was vorher in B war), denn er greift jeweils immer auf das neueste! zu. Ist die FPS Rate allerdings höher als die Hz Zahl, wird analog zum double buffering die FPS nach oben hin auf die Hz Rate gefixt.
- tripple buffering ohne VSync macht imho keinen Sinn
Mit dem tripple buffering und VSync hast du also minimum immer ein Bild im Frontbuffer und eins im Backbuffer (A oder B) -> wärend die GPU ein drittes im anderen Backbuffer berechnet. Der Vorteil liegt klar auf der Hand, man hat zumindest in der Theorie nicht die Performancenachteile wie beim double buffering, wo eben die FPS halbiert werden, wenn die GPU es nicht schafft. Sondern die GPU rechnet genau so schnell, wie sie kann -> ist sie langsamer als die Hz Zahl mit ihren FPS, werden einzelne Bilder eben mehrfach dargestellt. Beispielsweise bei 60 Hz und 50 FPS hast du 60 Monitor Refreshs, wovon 50 ein aktuelles Bild sind und 10 eben eine Dopplung des gerade schon dargestellten.
Tripple buffering scheint aber wenn ich das richtig in Erinnerung habe nicht immer und überall zu funkionieren -> sprich nicht immer zu wirken oder gar einstellbar zu sein (erzwingbar zu sein).
PS: das Thema Inputlag ist auch so ne geschichte. Im Grunde hast du mit diesem Wissen über die Buffer auch die Erkenntnis, das der Inputlag immer vorhanden ist.
Das Problem ist, der Mensch ist ein Gewohnheitstiert -> er gewöhnt sich schlicht an gewisse Umstände. So fallen hohe Latenzen bei vielen gar nicht ins Gewicht, wenn sie nicht wissen, wie es sich anfühlt, wenn es schneller ist
Fakt ist aber, der Tripplebuffer benötigt mehr "Zeit". Wie viel das in Summe in der ganzen Kette der Inputlag relevanten Teile ausmacht, hängt von den anderen Faktoren ab -> aber es ist maximal! ein Frame, was man einbüßt in der Latenz. Zumindest gegenüber dem double buffering mit VSync. Nämlich genau dann, wenn der Monitor ein Bild notgedrungen doppelt darstellt. Double buffering ohne VSync ist natürlich da noch schneller, birgt aber halt auch die Gefahr, dass durch Tearing und nur die Teildarstellung des Bildes ebenso der Lag vorhanden ist... (kann, muss aber nicht)
EDIT: ich vergaß übrigens zu erwähnen, das das Übertragen der Bilder zwischen den Puffern kein wirkliches übertragen ist. Sondern es werden nur Speicheradressen umgeschrieben, -> spart den transfer des Inhaltes und geht dabei noch rasend schnell. -> kost auch effektiv sogut wie keine Bandbreite.
EDIT2:
wenn du es ganz verrückt haben willst, machst du VSync mit tripple buffering und aktiviertem Framelimiter auf 1-2 Frames unter deiner Hz Zahl vom Monitor
Dann hast du ein von hier im Forum mehrfach bestätigtes Ereignis, was technisch scheinbar nicht 100% sauber erklärbar ist. Aber es funktioniert
Denn du hast kein nennenswert gesteigerten Lag, hast aber trotzdem ein Tearingfreies Bild.
Das kommt quasi G-Sync ansatzweise gleich -> setzt aber vorraus, das die Grafikhardware so stark ist, den eingestellten Framelimiter auch zu erreichen bzw. wenigstens IMMER flächendeckend minimal zu übertreffen.