Os qualificadores de armazenamento in
e out
realmente têm uma finalidade que contém e substitui a de varying
e attribute
. Eles definem quais variáveis são, respectivamente, em put e out put para o shader. Veja a página 7 do cartão de referência GLSL 4.2 :
in
: ligação ao shader do estágio anterior
out
: ligação de um sombreador para a próxima etapa
attribute
: igual in
ao shader de vértice
varying
: igual out
ao sombreador de vértice, igual in
ao sombreador de fragmento (Nota: estes são erroneamente trocados no cartão de referência mencionado acima.)
Com a observação lateral, os dois últimos foram descontinuados: eles não estão presentes no perfil principal do 4.2, apenas no perfil de compatibilidade.
O que exatamente eles fazem?
Quanto ao uso, leve o sombreador de vértice de Uma introdução ao 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);
}
Deve ser reescrito no núcleo 4.2 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);
}
Tutoriais inúteis
Suponho que a principal razão pela qual você encontra o código do tutorial "desatualizado" é que nem todos têm acesso ao hardware compatível com GLSL 3.3+. Independentemente disso, para um tutorial bom e mais atualizado, eu o indicarei com prazer na direção da Aprendizagem da Programação Gráfica Moderna em 3D de Nicol Bolas .