Mots clés in / out en GLSL

46

Je ne comprends pas vraiment comment utiliser les mots in- outclés / dans GLSL, et Google est inhabituellement inutile.

Que font-ils exactement? Comment pourrais-je les utiliser si, par exemple, je veux transmettre un ensemble variable variable par sommet au fragment shader?

Littéralement, chaque tutoriel que je trouve utilise les mots varying- attributeclés / et ce n'est pas utile.

Avi
la source

Réponses:

65

Les qualifications de stockage inet outont en fait un but qui contient et supérieure à celle des varyinget 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 inpour vertex shader
  • varying: idem que outpour vertex shader, idem que inpour 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 .

Eric
la source
2
@ NicolBolas Ha! Je pensais déjà qu'il y avait quelque chose de louche avec ça. C'est une erreur dans cette carte de référence alors. Merci! :-)
Eric