Voici quelques exemples d'utilisation des pixel shaders.
Ce programme initialise succintement direct3D et ses objets, et montre comment créer et charger dans la mémoire vidéo des pixels shaders.
Neuf (F1 -> F9) effets graphiques montrent la puissance des shaders.
Un pixel shader est un programme executable par la carte graphique. Après avoir déterminé les pixels à modifier sur le backbuffer suite au rendu d'une face ou d'un sprite, la carte graphique appelle pour CHAQUE pixel le pixel shader. Celui-ci contrôle donc intégralement la couleur de ces pixels !
Je vous laisse analyser les codes en assembleur et leurs commentaires. Sachez juste qu'un registre assembleur est un vecteur de 4 floats, chacune des composantes est accessible dans l'ordre par .x .y .z et .w ou .r .g .b .a (respectivement équivalents). Les ri sont les registres utilisables dans le code, les ti sont les registres envoyés aux pixels shaders par les vertex shaders ou par les fonctions comme le draw du sprite, les si correspondent aux slots pour les textures (SetTexture(3, pTexture) dans le code en C++. La texture sera accessible par le pixel shader via le slot s3).
F1: texture, pixel = pixel aux coordonnées uv du backbuffer à la couleur de celui de la texture aux mêmes coordonnées texture uv
F2: blur, pixel = moyenne de 4 pixels qui l'entourent (pas forcement les voisins immédiats, la coordonnées x de la souris modifie la distance du pixel aux 4 autres)
F3: texture coordinates, pixels = couleur équivalente aux coordonnées de la souris ('rg'ba == 'xy'zw)
F4: niveaux de gris, pixel = 0.299 * R + 0.587 * G + 0.114 * B sur chacune de ses composantes rgb du pixel (de la texture aux même coord uv)
F5: idem, mais dépend de la distance du pixel au curseur
F6: mix de textures, la position x du curseur modifie l'importance d'une texture par rapport à l'autre
F7: saturation de couleur : interpolation linéaire saturée (coef pas dans 0-1) entre couleur du pixel et son gris
F8: saturation de lumière, plus la souris est proche du pixel, plus celui-ci est eclairé
F9: noir et blanc, la position x du curseur modifie le niveau de comparaison de la couleur pour determiner noir ou blanc