OpenGL Triple buffering vzor pro FSync i ESync
Je to již nějaký ten pátek, co OpenGL s řešením přišlo a toto řešení se jmenuje Triple buffering. Namísto pouhých dvou bufferů Swap Chain u Triple bufferingu obsahuje buffery celkem tři. Jeden z těchto tří bufferů slouží vždy k prezentaci snímku na monitor počítače (Front buffer) a zbylé dva pak využívá grafická karta ke střídavému renderování snímků nových (Back buffery). Swap, neboli nám už známé prohození funkcí Back a Front bufferu je opět odložen (synchronizován) do doby VBI.
A jak to celé funguje, si opět ukážeme na našem příkladu, kdy grafická karta renderuje snímky rychlostí 5 ms (200 FPS).
Zatímco z Front bufferu jsou přenášena data na monitor počítače (Scan out), grafická karta vyrenderovala za 5 ms snímek do jednoho ze dvou Back bufferů. Na Swap se však bude muset stále čekat nějakých dalších 11 ms, protože ale má grafická karta k dispozici ještě jeden volný Back buffer, na nic nečeká a začne ihned renderovat další snímek do tohoto druhého Back bufferu. Ve druhém Back bufferu je snímek hotov v čase 10 ms, ale do doby VBI stále ještě zbývá nějakých 6 ms. Nyní jsou však obsazeny oba Back buffery a grafická karta tedy teoreticky nemá kam renderovat snímek další, takže co s tím?
Vyřeší to úplně jednoduše, první Back buffer, který obsahuje ten starší a tedy i méně aktuální snímek, je prostě vynulován (snímek zahozen) a grafická karta začne další snímek renderovat právě do něj. V době 15 ms je i tento buffer zaplněn snímkem novým a do doby VBI stále ještě zbývá 1 ms. Grafická karta se zachová úplně stejně, vymaže a začne renderovat do toho Bufferu, který obsahuje snímek
starší, méně aktuální. Po 1 ms konečně přichází doba VBI, kdy je nutné prohodit funkce Front a Back bufferu (Swap). Který z obou Back bufferů se stane novým Front bufferem a jeho obsah bude zaslán na obrazovku? Je to myslím úplně jasné, přeci ten, který obsahuje nejaktuálnější a kompletně hotový snímek. Je tedy proveden Swap a vše začíná od začátku.
Díky odloženému Swap do doby VBI je samozřejmě Tearing nenávratně pryč, grafická karta renderuje plnou rychlostí 200 FPS a to vše bez většího dopadu na zvýšený Lag. No prostě ideální stav věcí.
Stejně jako dříve společnost Nvidia se svým Fast Sync, tak také nyní společnost AMD s Enhanced Sync jednoduše čerpá právě z tohoto principu OpenGL Triple bufferingu a dalo by se s trochou nadsázky říci, že jedinou inovativní změnou je to, že funkce Fast Sync i Enhanced Sync jsou implementovány přímo v ovladačích grafických karet a můžete si tak tyto funkce nechat (až na výjimky) vynutit v každé počítačové hře. Původní OpenGL Triple buffering totiž musel být implementován přímo v dané počítačové hře.
Společnost AMD pak navíc ještě do svého Enhanced Sync implementovala její spodní hranici, kdy v případě významnějšího poklesu snímkové frekvence pod úroveň obnovovací frekvence monitoru se Enhanced Sync automaticky vypne a hra běží v režimu klasického Double bufferingu, tedy i včetně Tearingu. Důvodem tohoto řešení je zamezení Stutteringu (trhavého pohybu) u takto nízkých snímkových frekvencí i při použití Triple bufferingu.