Ok, nu skall jag fan gå igenom detta grundligt.
När ett spel renderar något så renderar den inte det direkt till skärmen. Om man skulle rendrera direkt till skärmen så skulle man ser hur polygonerna ritades upp, även om det går förbannat snabbt så kommer det flimmra som fan. Då använder man en teknik som heter dubbelbuffring.
Man skapar två buffrar, front och back-buffer. Front-buffern är den som visas på skärmen för tillfället och backbuffern är den som man arbetar på. När spelet skall börja rendera en frame så börjar den att rensa backbuffern med en färg. Sedan börjar den rita ut allt som skall vara på skärmen till den. Sedan när den är klar så byter den plats på front och backbuffern. Detta kallas att man flippar buffrarna. Detta betyder att frontbuffern kommer bli backbuffern och tvärt om. På detta sätt blir man av med flimmret som skulle uppstå om man ritade direkt till skärmen. När man tar screenshot så brukar programen skriva ner backbuffern till en fil eller minnet precis innan flippen sker.
En CRT-skärm (Cathode Ray Tube) använder elektronstrålar(rätt term?) för att uppdatera skärmen. Den styr dessa strålar med hjälp av magneter. Den börjar uppifrån höger och går rad för rad tills hela skärmen är fyld. Sedan sker en såkallad retrace, den måste ställa om magneterna så att dom pekar på över högra pixeln igen. En CRT-skärm uppdaterar skärmen från 60Hz och uppåt. Vid 60Hz kan många människor upptäcka flimmer eftersom en bild inte visas hela tiden. Minst 70Hz brukar vara rekommenderat men jag personligen föredrar minst 85Hz.
Om vi nu sätter ihop dessa två faktastycken så kommer ett litet problem uppstå. Vad händer om man flippar buffrarna när skärmen är mitt i en uppdatering? När skärmen har ritat klart så kommer den övre halvan bestå av en gammal frame och nedre halvan av den nya. Det är detta som kallas tearing. Yttligare problem blir det om spelet kan rendera i 300 FPS men skärmen bara klarar av 60Hz. Då kommer man få multipla tearing punkter på skärmen vilket är oerhört fult.
Vertical Sync(VSync) förhindrar detta. Det gör så att när programmet skall flippa buffrarna så väntar den på retrace signal från skärmen. Medans retrace sker så flippar programmet buffrarna och därmed kan inte tearing uppstå. Här finns svaret på varför spel inte kan köra över en viss FPS när VSync är påslaget. Han kan inte flippa buffrarna snabbare än vad skärmen kan visa dom.
VSync är inte helt utan problem dock. Vad händer t.ex. om programmet vill flippa buffrarna men en retrace har precis skett? då måste den vänta på att en ny retrace skall ske och detta gör att programmet stallar och måste vänta 17 millisekunder (vid 60Hz, 1/60=0.017) innan den kan fortsätta, worst case scenario. Det är är trippelbuffring kommer in i bilden.
Trippelbuffring är samma sak som dubbelbuffring fast du har en till buffer att leka med. Denna buffer är en mellan buffer. Så nu har vi tre buffrar. En som visas, en som skall visas, en som vi ritar på. När flippningen sker så flippas inte front och back buffern med väntan på vsync, utan backbuffern och middlebuffern flippas utan att vänta på vsync. När detta sker så markeras även att middlebuffern har ny info och skall flippas med frontbuffern vid nästa retrace. Med denna teknik så kan programmet börja rendera på nästa frame innan den tidigare framen fått visats än.
Tror jag fick med det mesta, t.o.m. stavfel och särskrivningar.