« Les cartes graphiques/Les cartes d'affichage » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Ligne 31 :
====Le balayage progressif de l'écran====
 
La carte graphique doit envoyer les pixels dans un certain ordre, qui est généralement ligne par ligne, colonne par colonne : de haut en bas et de gauche à droite. Cet ordre d'envoi est appelé le '''balayage progressif'''. Le balayage progressif est utilisé sur tous les écrans LCD moderne, mais il était plus adapté aux écrans CRT. Sur les écrans plats, l'image transmise à l'écran est affichée une fois qu'elle est intégralement reçue, d'un seul coup. Mais sur les anciens écrans de télévision, les choses étaient différentes. Les vieux écrans CRT fonctionnaient sur ce principe : un canon à électrons balayait l'écran en commençant en haut à gauche, et balayait l'écran ligne par ligne. Ce ''scan progressif'' de l'image faisait apparaitreapparaître l'image progressivement et profitait de la persistance rétinienne pour former une image fixe. L'image était donc affichée en même temps qu'elle était envoyée et le scan progressif correspondait à l'ordre d'allumage des pixels à l'écran.
 
[[File:CRT color.png|centre|vignette|upright=2|Intérieur d'un écran CRT. En 1, on voit le canon à électron. En 2, on voit le faisceau d'électron associé à chaque couleur. En 3, les faisceaux d'électrons sont déviés par des électroaimants, pour atteriratterrir sur le pixel à éclairer. En 4, le faisceau d'électrons frappe la surface de l'écran, composée de phosphore, qui s'illumine alors. En 5, on voit que les trois faisceaux ne frappent exactement au même endroit : l'un frappe sur une zone colorée en bleu, l'autre sur du vert, l'autre sur du rouge. Les trois zones combinées affichent une couleur par mélange du rouge, du vert et du bleu. Ne vous trompez pas : le faisceau d'électron n'a pas de couleur, comme indiqué sur le schéma, la couleur a été ajoutée pour faire comprendre qu'un faisceau est dirigé sur les pixels rouge, un autre sur les pixel bleus, et l'autre sur les pixels vert.]]
 
Avec le balayage progressif, la carte graphique envoie le pixel (0,0) en premier, puis celui situé à gauche et ainsi de suite. Quand il a finit d'envoyer la ligne de pixel, il descend et reprend à la ligne suivante, tout à gauche. L'ordre de transfert est donc assez simple : ligne par ligne, de gauche à droite. Pour gérer cet ordre de transmission, la carte graphique contient deux compteurs (des circuits qui compte de 0 à N). Le premier compteur compte pour la coordonnée X et l'autre la coordonnée Y, ce qui leur vaut les noms de compteur de colonne et de compteur de ligne. Les deux compteurs sont initialisés à 0 avant la transmission. De plus, ils sont configurés de manière à prendre en compte la résolution de l'écran. Par exemple, pour une résolution de 640 par 480, le compteur de colonne est configuré pour compter de 0 à 639, alors que l'autre compte de 0 à 479. En clair, leur valeur maximale, celle à laquelle ils s’arrêtent de compter, est égale à la résolution horizontale/verticale. Quand un pixel est envoyé, le compteur de colonne X est incrémenté, afin de pointer sur le pixel suivant. Quand ce compteur dépasse sa valeur maximale, cela signifie qu'il faut changer de ligne. Le compteur de ligne Y est alors incrémenté, afin de passer à la ligne suivante. Quand au compteur de colonne, il est réinitialisé, remis à zéro, afin de balayer la prochaine ligne à partir de la bonne colonne. Ainsi, pour une résolution de 640 par 480, le compteur de colonne est remis à 0 quand on l'incrémente au-delà de 639 : il ne passe alors pas à 640, mais repasse à 0.
Ligne 62 :
Un autre point important est que la carte graphique ne peut pas envoyer un flux de pixels n'importe quand et doit respecter des timings bien précis. Le flux de pixel envoyé à l'écran est souvent structuré d'une certaine manière, avec des temps de pause, un temps de maintien minimum pour chaque pixel, etc.
 
Premièrement, l'écran doit être synchronisé avec la carte graphique. Même si cela commence à changer de nos jours, l'écran affiche un certain nombre d'images par secondes, le nombre en question étant désigné sous le terme de "fréquence de rafraichissementrafraîchissement". Pour un écran avec une fréquence de rafraichissementrafraîchissement de 60 Hz (60 images par secondes), la carte graphique doit envoyer une nouvelle image tous les (1 seconde / 60) = 16,666... millisecondes. Sur les écrans LCD, la fréquence de rafraichissementrafraîchissement ne dépend pas de la résolution utilisée, en raison de différences de technologie. Sur les anciens écrans CRT, la fréquence de rafraichissementrafraîchissement dépendait de la résolution utilisée, et la carte d'affichage devait alors gérer le couple résolution-fréquence elle-même et la gestion de la fréquence de rafraichissementrafraîchissement était donc plus compliquée.
 
De plus, il faut tenir compte des timings liés à la transmission de l'image elle-même. La carte graphique doit envoyer les pixels avec des timings tout aussi stricts, qui dépendent du standard vidéo utilisé. Chaque pixel doit être maintenu durant un certain temps bien précis, il y a un certain temps entre la transmission de deux pixels, etc. Et le circuit d’interfaçage doit gérer tout cela.
Ligne 173 :
[[File:Tearing (simulated).jpg|centre|vignette|upright=2|''Tearing'' (simulé)]]
 
La seconde méthode attend que la première image soit affichée avant de faire le remplacement. Elle porte le nom de '''synchronisation verticale''', aussi appelée vsync, et vous en avez peut-être déjà entendu parler. C'est une option présente dans les options de nombreux jeux vidéo, ainsi que dans les réglages du pilote de la carte graphique. Avec cette technique, le ''tearing'' disparaitdisparaît tout simplement. Mais le défaut de la vsync est qu'elle impose un temps d'attente avant de remplacer l'image affichée. Le temps d'attente lié à la synchronisation verticale est d'autant plus grand que l'écran affiche peu d'images par secondes. Pour un écran qui affiche 60 images par seconde maximum, le délai ajouté par la synchronisation verticale est d'environ 1 seconde/60 = 16.666... millisecondes. Cela n'a l'air de rien, mais cela peut se ressentir. D'où l'impression qu'ont certains joueurs de jeux vidéo que leur souris est plus lente quand ils jouent avec la synchronisation verticale activée. Et encore, cela suppose que l'ordinateur peut sortir 60 images par secondes sans problèmes.
 
Pour comprendre les problèmes liés à la synchronisation verticale, rappelons que l'écran affiche une nouvelle image à intervalle régulier. Concrètement, l'écran affiche un certain nombre d'images par secondes, le nombre en question étant désigné sous le terme de "fréquence de rafraichissementrafraîchissement". Or, la fréquence de rafraichissementrafraîchissement de l'écran et le nombre d'images par secondes de l'ordinateur ne sont pas synchronisés l'un avec l'autre. La synchronisation verticale synchronise la fréquence de rafraichissementrafraîchissement avec les FPS, ce qui réduit le ''tearing'' et élimine d'autres problèmes. Du moins, c'est le cas à condition que l'ordinateur fournisse suffisamment l'images par secondes. Si l'écran a une fréquence de rafraichissementrafraîchissement de 60 Hz (60 images par secondes), tout va bien tant que l'ordinateur fournit effectivement 60 images par secondes à l'écran, voire plus. Mais si le nombre d'images par secondes n'est pas raccord avec le nombre d'images par seconde affiché par l'écran, la synchronisation verticale entraineentraîne des différences de timings perceptibles.
 
Cela se voit avec les jeux vidéo, qui ont un nombre d'image par seconde très variable, et le temps qui s'écoule entre deux images varie grandement d'une image à l'autre. Or, le temps entre l'affichage de deux images est fixe avec la vsync activée. Ces différences de timings entrainententraînent des sauts d'images quand un jeu vidéo calcule moins d'images par seconde que ce que peut accepter l'écran, ce qui donne une impression désagréable appelée le ''stuttering''. Un phénoménephénomène très similaire apparaitapparaît avec les vidéos/films encodés à 24 images par secondes qui s'affichent sur un écran à 60 Hz : l'écran affiche une image tous les 16.6666... millisecondes, alors que la vidéo veut afficher une image toutes les 41,666... millisecondes. Or, 16.666... et 41.666... n'ont pas de diviseur entier commun : une image de film d'affiche tous les 2,5 images d'écran. Concrètement, écran et film sont désynchronisés. Si cela ne pose pas trop de problèmes sans la synchronisation verticale, cela en pose avec. Une image sur deux est décalée en termes de timings avec la synchronisation verticale, ce qui donne un effet bizarre, bien que léger, lors du visionnage sur un écran d'ordinateur.
 
====Les corrections apportées à la synchronisation verticale : le ''triple buffering'' et ses dérivés====