Les qualifications de stockage in
et out
ont en fait un but qui contient et supérieure à celle des varying
et attribute
. Ils définissent les variables sont respectivement en met et en met pour le shader. Voir la carte de référence GLSL 4.2 page 7:
in
: liaison dans le shader depuis l'étape précédente
out
: liaison d'un shader à la prochaine étape
attribute
: idem que in
pour vertex shader
varying
: idem que out
pour vertex shader, idem que in
pour fragment shader (Remarque: ceux-ci sont retournés par erreur dans la fiche de référence mentionnée ci-dessus.)
Notez que les deux derniers sont en quelque sorte déconseillés: ils ne sont pas présents dans le profil principal 4.2, mais uniquement dans le profil de compatibilité.
Que font-ils exactement?
En ce qui concerne l'utilisation, prenez le vertex shader de l' intro à l'OpenGL moderne. Chapitre 2.2: Shaders :
#version 110
attribute vec2 position;
varying vec2 texcoord;
void main()
{
gl_Position = vec4(position, 0.0, 1.0);
texcoord = position * vec2(0.5) + vec2(0.5);
}
Il devrait être réécrit en 4.2 core comme suit:
#version 420
in vec2 position;
out vec2 texcoord;
void main()
{
gl_Position = vec4(position, 0.0, 1.0);
texcoord = position * vec2(0.5) + vec2(0.5);
}
Tutoriels inutiles
Je suppose que la raison principale pour laquelle vous trouvez un code de tutoriel "obsolète" est que tout le monde n’a pas accès au matériel compatible GLSL 3.3+. Quoi qu'il en soit, pour un didacticiel de qualité et plus à jour, je vous orienterai avec plaisir dans la direction de Learning Modern 3D Graphics Programming de Nicol Bolas .