Dus soms word er een frame die niet in sync staat weggegooid en opnieuw berekent en dat kost dus extra cpu en een lagere framerate.
Helemaal niet.
Normaal gesproken gebruik je twee buffers met renderen. De ene buffer is de 'frontbuffer', de buffer die op dat moment op het scherm zichtbaar is. De andere buffer is de 'backbuffer', de buffer waar je het volgende frame in aan het tekenen bent.
Zodra je klaar bent met dat frame, dan 'swap' je de buffers. De backbuffer wordt nu dus frontbuffer, en is zichtbaar. De frontbuffer wordt de nieuwe backbuffer, en die kun je weer gaan vullen met het volgende frame.
Wat vsync hier doet is het swappen van de buffers vertragen tot het moment dat de monitor aan het volgende frame begint. Vsync is namelijk een afkorting van vertical synchronization en slaat erop dat de kathodestraal van een klassieke beeldbuis van rechtsonder weer teruggaat naar linksboven, en op dat moment wordt er dus even niet 'getekend' door de monitor, en zie je geen bij-effecten als tearing (dat ontstaat dus doordat een deel van het beeld al 'getekend' was, en halverwege ineens de buffers geswapt worden, en dus de rest van het beeld met het nieuwe frame getekend wordt, waardoor je ergens een scheiding tussen oud en nieuw frame ziet).
Hoewel LCD en plasmaschermen geen kathodestraal meer hebben, werken ze op zich nog op een soortgelijke manier. De beeldinformatie wordt namelijk nog steeds van linksboven tot rechtsonder verzonden, en als halverwege het verzenden de buffers worden geswapt, heb je nog steeds tearing.
Er worden dus geen frames weggegooid, en de GPU/CPU hoeft niet meer te doen. Het frame wordt gewoon vertraagd totdat de monitor aan het volgende frame begint. Je doet dus eigenlijk minder. Zoals hierboven al gezegd, in eht ergste geval ben je net een fractie te traag (je haalt bv 59 fps, en je monitor is 60 Hz), en moet je dus bijna een compleet frame wachten. De framerate wordt dan meteen gehalveerd van 60 fps naar 30 fps. En dat kan een schokkerig effect hebben.
Wat triple buffering doet, is een derde buffer toevoegen. Deze buffer zit tussen de hierboven geschreven frontbuffer en backbuffer. Je hebt hierdoor dus alvast een frame 'klaarstaan' als de buffers geswapt moeten worden.
Het grootste voordeel hiervan is dat er altijd een backbuffer beschikbaar is om het volgende frame in te tekenen, zodat je niet hoeft te wachten totdat de frontbuffer weer vrijkomt. Hierdoor kan de gemiddelde framerate een stuk hoger blijven liggen, ook al ben je af en toe net niet snel genoeg met het renderen van het volgende frame voor de swap.
Het nadeel is dat je een extra frame 'achterloopt', waardoor een spel iets minder direct lijkt te reageren.
Double buffering met vsync uit is de meest 'directe' manier van spelen, omdat je op volle snelheid je frames rendert, en direct naar de monitor dumpt.
In Direct3D is triple buffering iets dat de ontwikkelaar van het spel in zou moeten bouwen. Dan werkt dit prima. In DX10 is de 'swapchain' heel flexibel, waardoor het met een tooltje niet zo maar gehackt kan worden, je weet niet precies wat je applicatie doet. Helaas bouwen nog te weinig ontwikkelaars deze functionaliteit in.