« Les cartes graphiques/Les cartes accélératrices 2D » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
mAucun résumé des modifications
Ligne 1 : Ligne 1 :
Avec l'arrivée des jeux vidéo, les cartes graphiques ont pu s'adapter. Les premiers jeux vidéos étaient tous des jeux 2D qui donnaient l'illusion de la 3D. Les cartes graphiques 2D ont d'abord commencé par accélérer le tracé et coloriage de figures géométriques simples : lignes, segments, cercles, ellipses, etc. Ces fonctions permettaient d’accélérer les premières interfaces graphiques des systèmes d'exploitation. Les cartes graphiques actuelles supportent aussi d'autres technologies, comme des techniques d’accélération du rendu des polices d'écriture, une accélération du scrolling, des accélérateurs d'affichage pour les bibliothèques GDI (utilisées sous Windows), ou encore un support matériel du curseur de la souris.
Avec l'arrivée des jeux vidéo, les cartes graphiques ont pu s'adapter. Les premiers jeux vidéos étaient tous des jeux 2D qui donnaient l'illusion de la 3D. Les cartes graphiques 2D ont d'abord commencé par accélérer le tracé et coloriage de figures géométriques simples : lignes, segments, cercles, ellipses, etc. Ces fonctions permettaient d’accélérer les premières interfaces graphiques des systèmes d'exploitation. Les cartes graphiques actuelles supportent aussi d'autres technologies, comme des techniques d’accélération du rendu des polices d'écriture, une accélération du scrolling, des accélérateurs d'affichage pour les bibliothèques GDI (utilisées sous Windows), ou encore un support matériel du curseur de la souris.

==Blitter ==


Avec l'arrivée des interfaces graphiques, les concepteurs de cartes vidéo ont permis à celles-ci d'accélérer le rendu 2D. La base d'un rendu en 2D est de superposer des images 2D précalculées les unes au-dessus des autres. Par exemple, on peut avoir une image pour l’arrière plan(le décor), une image pour le monstre qui vous fonce dessus, une image pour le dessin de votre personnage, etc. Ces images sont appelées des sprites. Ces images sont superposées les unes au-dessus des autres, au bon endroit sur l'écran. Cette surperpositon se traduit par une copie des pixels de l'image aux bons endroits dans la mémoire, chaque sprite étant copié dans la portion de mémoire qui contient l'arrière plan. Ce genre de copie arrive aussi lorsqu'on doit scroller, ou qu'un objet 2D se déplace sur l'écran.
Avec l'arrivée des interfaces graphiques, les concepteurs de cartes vidéo ont permis à celles-ci d'accélérer le rendu 2D. La base d'un rendu en 2D est de superposer des images 2D précalculées les unes au-dessus des autres. Par exemple, on peut avoir une image pour l’arrière plan(le décor), une image pour le monstre qui vous fonce dessus, une image pour le dessin de votre personnage, etc. Ces images sont appelées des sprites. Ces images sont superposées les unes au-dessus des autres, au bon endroit sur l'écran. Cette surperpositon se traduit par une copie des pixels de l'image aux bons endroits dans la mémoire, chaque sprite étant copié dans la portion de mémoire qui contient l'arrière plan. Ce genre de copie arrive aussi lorsqu'on doit scroller, ou qu'un objet 2D se déplace sur l'écran.


[[File:Painter's algorithm.svg|centre|Exemple de rendu 3D.]]
[[File:Painter's algorithm.svg|centre|Exemple de rendu 3D.]]

==Blitter ==


Certaines cartes 2D ont introduit un composant pour accélérer ces copies : le '''blitter'''. Sans blitter, les copies étaient donc à la charge du processeur, qui devait déplacer lui-même les données en mémoire. Pour ce faire, un petit morceau de programme répétait en boucle une série d'instructions pour copier les données pixel par pixel. Le blitter est conçu pour ce genre de tâches, sauf qu'il n'utilise pas le processeur. Ceci dit, un blitter possède d'autres fonctionnalités. Il peut effectuer une opération bit à bit entre les données à copier et une données fournie par le programmeur.
Certaines cartes 2D ont introduit un composant pour accélérer ces copies : le '''blitter'''. Sans blitter, les copies étaient donc à la charge du processeur, qui devait déplacer lui-même les données en mémoire. Pour ce faire, un petit morceau de programme répétait en boucle une série d'instructions pour copier les données pixel par pixel. Le blitter est conçu pour ce genre de tâches, sauf qu'il n'utilise pas le processeur. Ceci dit, un blitter possède d'autres fonctionnalités. Il peut effectuer une opération bit à bit entre les données à copier et une données fournie par le programmeur.

Version du 14 novembre 2016 à 21:40

Avec l'arrivée des jeux vidéo, les cartes graphiques ont pu s'adapter. Les premiers jeux vidéos étaient tous des jeux 2D qui donnaient l'illusion de la 3D. Les cartes graphiques 2D ont d'abord commencé par accélérer le tracé et coloriage de figures géométriques simples : lignes, segments, cercles, ellipses, etc. Ces fonctions permettaient d’accélérer les premières interfaces graphiques des systèmes d'exploitation. Les cartes graphiques actuelles supportent aussi d'autres technologies, comme des techniques d’accélération du rendu des polices d'écriture, une accélération du scrolling, des accélérateurs d'affichage pour les bibliothèques GDI (utilisées sous Windows), ou encore un support matériel du curseur de la souris.

Avec l'arrivée des interfaces graphiques, les concepteurs de cartes vidéo ont permis à celles-ci d'accélérer le rendu 2D. La base d'un rendu en 2D est de superposer des images 2D précalculées les unes au-dessus des autres. Par exemple, on peut avoir une image pour l’arrière plan(le décor), une image pour le monstre qui vous fonce dessus, une image pour le dessin de votre personnage, etc. Ces images sont appelées des sprites. Ces images sont superposées les unes au-dessus des autres, au bon endroit sur l'écran. Cette surperpositon se traduit par une copie des pixels de l'image aux bons endroits dans la mémoire, chaque sprite étant copié dans la portion de mémoire qui contient l'arrière plan. Ce genre de copie arrive aussi lorsqu'on doit scroller, ou qu'un objet 2D se déplace sur l'écran.

Exemple de rendu 3D.
Exemple de rendu 3D.

Blitter

Certaines cartes 2D ont introduit un composant pour accélérer ces copies : le blitter. Sans blitter, les copies étaient donc à la charge du processeur, qui devait déplacer lui-même les données en mémoire. Pour ce faire, un petit morceau de programme répétait en boucle une série d'instructions pour copier les données pixel par pixel. Le blitter est conçu pour ce genre de tâches, sauf qu'il n'utilise pas le processeur. Ceci dit, un blitter possède d'autres fonctionnalités. Il peut effectuer une opération bit à bit entre les données à copier et une données fournie par le programmeur.

Pour voir à quoi cela peut servir, reprenons notre exemple du jeu 2D, basé sur une superposition d'images. Les images des différents personnages sont souvent des images rectangulaires. Par exemple, l'image correspondant à notre bon vieux pacman ressemblerait à celle-ci. Évidemment, cette image s'interface mal avec l’arrière-plan. Avec un arrière-plan blanc, les parties noires de l'image du pacman se verraient à l'écran.

Image de Pacman.
Image de Pacman.

L'idéal serait de ne pas toucher à l’arrière-plan sur les pixels noirs de pacman, et de ne modifier l’arrière-plan que pour les pixels jaunes. Ceci est possible en fournissant un masque, une image qui indique quels pixels modifier lors d'un transfert, et quels sont ceux qui ne doivent pas changer. Grâce à ce masque, le blitter sait quels pixels modifier. Le blitter prend l'image du pacman, le morceau de l’arrière-plan auquel on superpose pacman, et le masque. Pour chaque pixel, il effectue l'opération suivante : ((arrière-plan) AND (masque)) OR (image de pacman). Au final, l'image finale est bel et bien celle qu'on attend.

Masque de Pacman.
Masque de Pacman.

Accélération matérielle des sprites

Avec d'autres cartes 2D, les sprites ne sont pas ajoutés sur l’arrière-plan : celui-ci n'est pas modifié. À la place, c'est la carte graphique qui décidera d'afficher les pixels de l’arrière-plan ou du sprite pendant l'envoi des pixels à l'écran, lors du balayage effectué par le CRTC.

Pour cela, les sprites sont stockés dans des registres ou des RAM. Pour chaque RAM /sprite, on trouve trois registres permettant de mémoriser la position du sprite à l'écran : un pour sa coordonnée X, un autre pour sa coordonnée Y, et un autre pour sa profondeur (pour savoir celui qui est superposé au-dessus de tous les autres). Lorsque le CRTC demande à afficher le pixel à la position (X , Y), chaque triplet de registres de position est comparé à la position X,Y envoyée par le CRTC. Si aucun sprite ne correspond, les mémoires des sprites sont déconnectées du bus et le pixel affiché est celui de l'arrière-plan. Dans le cas contraire, la RAM du sprite est connectée sur le bus et son contenu est envoyé au RAMDAC. Si plusieurs sprites doivent s'afficher en même temps, le bus choisit celui dans la profondeur est la plus faible (celui superposé au-dessus de tous les autres).

Sprites matériels.
Sprites matériels.

Cette technique a autrefois été utilisée sur les anciennes bornes d'arcade, ainsi que sur certaines console de jeu bon assez anciennes. Mais de nos jours, elle est aussi présente dans les cartes graphiques actuelles dans un cadre particulièrement spécialisé : la prise en charge du curseur de la souris, ou le rendu de certaines polices d'écritures ! Les cartes graphiques contiennent un ou plusieurs sprites, qui représentent chacun un curseur de souris, et deux registres, qui stockent les coordonnées x et y du curseur. Ainsi, pas besoin de redessiner l'image à envoyer à l'écran à chaque fois que l'on bouge la souris : il suffit de modifier le contenu des deux registres, et la carte graphique place le curseur sur l'écran automatiquement. Pour en avoir la preuve, testez une nouvelle machine sur laquelle les drivers ne sont pas installés, et bougez le curseur : effet lag garantit !