reinterpretcast

Dans l’exemple ci-dessus, il peut sembler au départ qu’un taux de rafraîchissement de 0,26 Hz et un framerate de 0,2 FPS (Frames Per Second) pourraient être assez proches pour s’afficher correctement, cependant il est clair en regardant la démo s’exécuter que les deux sont complètement désynchronisés et donc que le screen tearing se produit régulièrement.

Le vrai problème avec cet exemple est qu’il s’agit d’une « application à tampon unique ». Nous écrivons nos trames directement dans le tampon qui est alimenté à l’écran, et donc quand l’écran veut rafraîchir son image, il y a un risque qu’il obtienne une trame qui n’est pas encore complètement terminée. Dans une application réelle, le framerate peut souvent changer de façon spectaculaire en fonction de certaines circonstances, ce qui peut aggraver ce problème dans les applications à tampon unique et rendre le déchirement de l’écran encore plus imprévisible.

Double tampon

Une façon d’atténuer certains de ces problèmes est d’utiliser le double tampon. Cette méthode de dessin consiste à écrire les données de l’image dans un tampon arrière, puis à les copier sur le tampon primaire (le flux vidéo vers l’écran) uniquement lorsqu’une image est complète. De cette façon, l’utilisateur ne verra jamais de trames à moitié terminées, n’est-ce pas ? Faux.

Bien que le déchirement de l’écran ait tendance à être réduit de manière significative avec le double tampon, la copie des données prend du temps, et il est donc tout à fait possible que le moniteur rafraîchisse son image à mi-chemin du processus de copie du tampon ! Ce problème peut être visualisé exactement comme le déchirement à tampon unique – dans la démo précédente, imaginez simplement que les pixels écrits dans le tampon primaire ne sont pas générés directement par la carte graphique, mais sont au contraire placés dans le tampon de manière séquentielle comme résultat d’une opération de copie à partir d’un tampon secondaire.

Double Buffering + VSync

Une autre tactique d’atténuation consiste à utiliser VSync. Abréviation de « synchronisation verticale », VSync fonctionne en ne laissant le tampon arrière écrire dans le tampon primaire que juste après le rafraîchissement de l’affichage. L’espoir est que l’opération de copie du tampon soit terminée avant le prochain rafraîchissement. Cela fonctionne en réduisant considérablement le déchirement de l’écran, cependant a ses problèmes.

Si vous avez une application à framerate élevé, VSync fonctionnera généralement parfaitement. Votre framerate est limité à la fréquence de rafraîchissement de votre moniteur, mais c’est bien parce que votre moniteur afficherait à cette fréquence de toute façon. Le problème survient lorsque vous obtenez un framerate inférieur à la fréquence de rafraîchissement de votre écran.

Disons que vous obteniez 60 FPS sur un écran 75 Hz – cela signifie que le frame buffer se met à jour à 80% de la fréquence de rafraîchissement. Si VSync est activé, les trames doivent être copiées dans le tampon d’écran à une subdivision de la fréquence de rafraîchissement. Dans ce cas, l’application ne respectera pas la « date limite » un cycle sur deux, ce qui signifie que notre taux d’images correspondra à la moitié du taux de rafraîchissement : 37,5 FPS. C’est nettement moins que les 60 FPS que la carte graphique peut atteindre.

Le TL;DR pour le VSync à double tampon est que si vous obtenez un FPS constamment plus élevé que votre taux de rafraîchissement, cela peut être une bonne idée pour réduire le déchirement de l’écran, mais si le FPS va tomber en dessous du taux de rafraîchissement de votre écran, le VSync peut réduire considérablement le FPS.

Triple buffering + VSync

Le saint Graal de tout ce bazar est généralement le triple buffering avec VSync. La limite de VSync avec double buffering est que le framerate peut diminuer de manière significative en raison du temps passé à attendre le bon moment pour copier le tampon secondaire dans le tampon primaire. L’attente n’est souvent pas une idée fantastique en informatique lorsqu’elle peut être évitée, donc une solution ici est de simplement ajouter un autre tampon.

Avec trois tampons, les deux tampons arrière peuvent être tirés alternativement de sorte qu’il est toujours le cas qu’un tampon est complet et un est en cours. Cela signifie que juste après un rafraîchissement du moniteur, le tampon qui est actuellement complet peut être copié sur le tampon principal – fournissant les avantages de VSync sans l’inconvénient du framerate discuté précédemment.

Le principal inconvénient du triple tampon lorsqu’il est disponible dans les applications est qu’il prend plus de mémoire – si nous parlons de cartes graphiques, cela signifie plus de VRAM (Video RAM). Il s’agit d’une mémoire rapide utilisée directement par la carte graphique. Dans certains cas, le triple buffering peut entraîner une baisse significative du nombre d’images par seconde lorsque la RAM à latence plus élevée est utilisée pour compenser le manque de VRAM native. En général, ce n’est pas un gros problème car la quantité de mémoire occupée par le troisième tampon est souvent faible par rapport à la taille totale de la VRAM, mais VSync avec seulement deux tampons peut fournir un meilleur framerate dans certains cas très spécifiques ! C’est comme ça, hein ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.