A l'origine pensé par
Pixar pour ses animations vidéos, les shaders ont fait leur apparition dans le domaine du jeu vidéo assez récemment et sont aujourd'hui indispensables pour qui veut réaliser des effets graphiques un tant soit peu évolués.
GLSL (
Def. GLSL (en)) est l'abréviation de Open
GL Shading
Language, traduisez : langage de programmation de shaders OpenGL.
Effectivement, le GLSL est un langage de
programmation de shaders.
La programmation GPU
Le
GPU est le processeur de votre carte graphique, c'est lui qui calcule vos rendus 3D. La programmation GPU revient donc à... programmer nos calculs de rendus 3D

Ah bah tiens, c'est la meilleure du siècle celle-là
Les shaders servent à programmer le
pipeline de rendu par défaut de votre carte graphique, appelé le
FFP.
Les shaders ne sont donc rien de plus que des programmes, donc :
- un code source;
- une compilation;
- une exécution.
Ils se différencient toutefois des programmes écrits en C, C++ ou autre langage réservé à une exécution
CPU, de par leur compilation et leur exécution.
La compilation d'un shader est effectuée lors du lancement de votre application, et l'exécution se passe au niveau du GPU, contrairement à vos programmes habituels (C, C++, C#, Java, ...) qui eux sont traités par le CPU, et c'est ce qui fait la puissance et la flexibilité des shaders dans le rendu 3D en général
En assembleur ?
Quand on parle de la programmation d'un processeur, on pense généralement à l'assembleur. Il existe effectivement des langages assembleur pour programmer un GPU, mais nous ne les traiterons pas dans ce tutoriel.
Ici, nous ne parlerons que d'un langage de programmation GPU dit de haut niveau, le GLSL.
Le GLSL a été développé par l'
ARB pour l'API graphique OpenGL afin d'offrir une plus grande souplesse dans la programmation de shaders.
DirectX a également développé son propre langage haut niveau pour la programmation de shaders, il s'agit du
HLSL, mais il est plutôt hors-sujet, je ne vous en parle qu'à titre de comparaison.
Le GLSL est donc un langage de programmation de shaders de haut niveau, mais à quoi ça ressemble au juste ?
Voici le code source d'un shader écrit en GLSL

:
Code : Autre1
2
3
4
5
6
7
8
9
| void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_Vertex * gl_ModelViewMatrix;
} |
Il s'agit là d'un simple vertex shader.
Vertex shader ??
Oui. Il est important de distinguer deux types de shaders différents, remplissant chacun des fonctions bien définies et aucunement identiques :
- les vertex shaders : ce sont des shaders qui interviennent lors du traitement de chaque sommet. Dans les vertex shaders vous pourrez modifier le calcul des différents attributs de vos sommets;
- les pixel shaders : aussi appelés fragment shaders, ils permettent de traiter le rendu de chaque pixel qui s'affichera à l'écran. Ces derniers offrent une grande flexibilité dans le domaine du rendu 3D.
J'espère que vous y voyez à présent un peu plus clair

Les shaders vous permettent de programmer le traitement de chaque sommet ainsi que de chaque pixel.