Seznam kapitol
Máme za sebou dva kontrolní lety nad naším grafickým potrubím. Dnes nás čeká let závěrečný, na jehož konci bychom už konečně rádi viděli nějaký ten obrázek z naší hry na samotném monitoru počítače.
Screen Tearing
U Swap Chain je to už naše třetí zastávka, takže bychom to měli mít v malíčku. Já to ale pro jistotu zopakuji. Grafická karta vytváří snímek v Back Bufferu. Když je snímek hotový, pomocí změny adresy ukazatele (Pointer) provede Swap a z Back Buffer se stává Front Buffer (samozřejmě také naopak). Mezi tím Video Controller (VC) skenuje a kopíruje data snímku z Front Bufferu do monitoru.
Při naši „monitorové“ exkurzi jsme zjistili, že monitor pracuje s konstantní snímkovou frekvencí, která je dána schopností jeho elektroniky. V našem případě monitor zvládne zobrazit 60 snímků za sekundu ve Full HD rozlišení. Pokud tedy monitor musí pracovat s konstantní snímkovou frekvencí, tak i VC (který monitor zásobuje daty a řídí signál) musí nutně používat stejnou frekvenci.
Video kontrolér tedy snímá (skenuje) Front Buffer pixel po pixelu (zleva doprava), řádek po řádku (odshora dolů), 60 krát za sekundu a tedy i doba jednoho skenování Frame Bufferu je 16.66 ms. Během této doby musí samozřejmě video kontrolér také vytvářet (námi už známou) oblast s názvem Blanking Area tak, aby byl výsledný signál pro monitor kompletní.
Na rozdíl od monitoru grafická karta a její Swap Chain nepracuje s konstantní snímkovou frekvencí. Grafická karta vytváří snímek, jak nejrychleji to jen jde a pokud má hotovo, provede Swap a okamžitě se pouští do snímku dalšího. Ani doba, po kterou grafická karta vytváří jeden snímek, není stejná, ale mění se s náročností vykreslované scény. Prostě a jednoduše, grafická karta pracuje s variabilní snímkovou frekvencí. Pro lepší pochopení zaneseme práci variabilní snímkové frekvence grafické karty a konstantního skenování video kontroléru do jediného diagramu. Výsledek by měl vypadat asi nějak takto:
Při pohledu na obrázek je myslím patrné, oč tu běží. Hned při prvním skenování Front Bufferu video kontrolérem se v průběhu kopírování provedl Swap Front/Back Bufferu, o kterém VC nemá ani zdání, takže prvních 11 ms kopíroval data z jednoho úložiště (starého Front Bufferu) a zbylých 5,66 ms kopíroval data z druhého úložiště (nového Front Bufferu alias bývalého Back Bufferu).
Výsledný snímek, který je zaslán k zobrazení na monitor, se tedy skládá ze snímků dvou, které mezitím stihla vygenerovat grafická karta. Tomuto jevu se tedy říká
Screen Tearing
a vysvětluje také, proč můžeme ve hře dosahovat vyšších snímkových frekvencí, než je konstantní snímková frekvence monitoru schopna. Jeden snímek monitoru totiž může být složen z více fragmentů snímků grafické karty.
Pokud jste ještě neusnuli, pak gratuluji, protože vím, že to příliš zábavné není. Pro odreagování si sami zkuste spočítat, z kolika fragmentů snímků se bude skládat obraz na 60Hz monitoru v případě, že grafická karta generuje snímky rychlostí přibližně 5 ms. Máte-li v duchu spočteno a trochu vás to nakoplo, poletíme dál.