Los calificadores de almacenamiento in
y en out
realidad tienen un propósito que contiene y reemplaza el de varying
y attribute
. Definen qué variables son, respectivamente, en salidas y salidas para el sombreador. Consulte la página 7 de la tarjeta de referencia GLSL 4.2 :
in
: enlace al sombreador de la etapa anterior
out
: vinculación de un sombreador a la siguiente etapa
attribute
: igual que in
para el sombreador de vértices
varying
: igual que out
para el sombreador de vértices, igual que in
para el sombreador de fragmentos (Nota: estos se voltean erróneamente en la tarjeta de referencia mencionada anteriormente).
Con la nota al margen de que los dos últimos están en desuso: no están presentes en el perfil principal 4.2, solo en el perfil de compatibilidad.
¿Qué hacen exactamente?
En cuanto al uso, tome el sombreador de vértices de una introducción a OpenGL moderno. Capítulo 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);
}
Debería reescribirse en 4.2 core como:
#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);
}
Tutoriales inútiles
Supongo que la razón principal por la que encuentras un código tutorial "desactualizado" es que no todos tienen acceso a hardware compatible con GLSL 3.3+. De todos modos, para un tutorial bueno y más actualizado, con mucho gusto lo guiaré en la dirección de la Programación de gráficos 3D modernos de aprendizaje de Nicol Bolas .