Développement XNA pour la XBox et le PC
304
Vertex shaders et pixel shaders
On distingue deux types de shaders : les vertex shaders et les pixels shaders.
Les vertex shaders sont exécutés sur tous les vertices d’un objet. Si vous dessinez un
simple triangle à l’écran, le vertex shader sera exécuté pour les trois vertices qui composent
ce triangle. Mais les vertex shaders peuvent également être exécutés sur des sprites en 2D :
en effet, ceux-ci sont constitués de 4 vertices (un dans chaque coin du sprite).
Quant aux pixels shaders, ils sont exécutés sur tous les pixels visibles à l’écran de l’objet
que vous dessinez, qu’il s’agisse d’un objet en 3D ou d’un sprite en 2D.
Chronologiquement, le processus est le suivant :
1. Le GPU (processeur graphique) reçoit des paramètres et des vertices (leur position,
couleur, texture, etc., tout dépend du choix que vous avez fait).
2. Le vertex shader est d’abord exécuté. En sortie, vous disposez des vertices modifiés
(ou non, tout dépend du shader).
3. Ces données passent ensuite à l’étape de rastérisation. Au cours de cette étape, les
données vectorielles sont converties en données composées de pixels pouvant être
affichés à l’écran.
4. Le résultat de la rastérisation est ensuite envoyé au pixel shader. Après l’exécution
de ce programme, le GPU retourne la couleur qui devra être affichée.
Comme pour un processeur classique, le processeur graphique ne comprend que des
instructions de bas niveau. Ainsi, pour faciliter le travail des développeurs, des langages
de plus haut niveau (c’est-à-dire, plus intelligibles) à la syntaxe très proche des langages
tels que le C ont été créés. Du côté d’OpenGL, le langage standardisé est le GLSL. Le
fabricant de cartes graphiques NVidia a, quant à lui, créé le langage Cg. Enfin, de son
côté, Microsoft a créé le HLSL (High Level Shader Language). C’est ce dernier langage
qui est utilisé par l’API DirectX, et donc par XNA.
Dans XNA, pour afficher quelque chose à l’écran vous devez passer obligatoirement
par HLSL. Cependant, pour vous faciliter les choses (c’est le mot d’ordre de XNA après
tout !) et vous éviter de devoir vous attaquer directement au HLSL, les développeurs ont créé
les classes SpriteBatch et BasicEffect. En arrière-plan, ces classes travaillent directement
avec des shaders. Vous pouvez d’ailleurs retrouver le code source de ces shaders à cette
adresse : http://creators.xna.com/fr-FR/education/catalog/.
Définition
OpenGL est une API multi-plate-forme d’affichage en trois dimensions développée par Silicon Graphics.
=Labat FM.book Page 304 Vendredi, 19. juin 2009 4:01 16
Précédent

- 325/366

Suivant