Con l'espressione inglese screen tearing (traducibile come strappo dello schermo) si indica un artefatto che si genera quando un singolo fotogramma visualizzato sullo schermo contiene informazioni provenienti da due o più fotogrammi. Tale effetto si manifesta quando la frequenza dei fotogrammi della sorgente (tipicamente una scheda video) è differente dalla frequenza di aggiornamento del dispositivo di visualizzazione (es. un monitor), per cui il buffer viene riscritto una o più volte con contenuto appartenente ad altri fotogrammi nell'intervallo di tempo usato dal dispositivo di visualizzazione per leggere un singolo fotogramma, generando una o più linee di tearing orizzontali che si muovono in verticale con velocità proporzionale alla differenza di frequenza. Può essere dovuto anche alla mancanza di sincronia tra due dispositivi con la stessa frequenza, nel qual caso la linea di tearing si trova in una posizione fissa, corrispondente alla differenza di fase.[1]
L'effetto è particolarmente visibile quando il contenuto dello schermo mostra oggetti che si muovono in orizzontale, e si manifesta come una frattura orizzontale tra due o più parti di fotogramma che appaiono disallineate verticalmente: ciò è dovuto al fatto che il contenuto del fotogramma viene letto e scritto riga per riga, quindi parte delle righe appartengono ad un fotogramma, parte ad un altro.
Una soluzione comune, nota come sincronizzazione verticale (V-sync), consiste nell'impedire alla sorgente di modificare il contenuto del buffer fino a quando il corrente ciclo di aggiornamento del dispositivo di output non è completo. Per evitare di bloccare completamente la sorgente nell'intervallo di tempo in cui il dispositivo di output viene aggiornato si fa tipicamente uso di più buffer, con un buffer separato per il rendering che viene poi rapidamente copiato in un buffer di visualizzazione (double buffering) oppure alternando due buffer in modo che mentre uno viene letto la sorgente possa generare il fotogramma successivo sull'altro buffer (page flipping).[2][3]
Note
[modifica | modifica wikitesto]- ^ Madhav, chap. 1.
- ^ Introducing Enhanced Sync, su gaming.radeon.com.
- ^ Adaptive VSync, su geforce.com.
Bibliografia
[modifica | modifica wikitesto]- Game Programming in C++ Sanjay Madhav, Addison-Wesley, 2018, ISBN 978-0-1345-9731-7.