palabras clave de entrada / salida en GLSL

46

Realmente no entiendo cómo usar las palabras clave in/ outen GLSL, y Google está siendo inútilmente inusual.

¿Qué hacen exactamente? ¿Cómo los usaría si, por ejemplo, quiero pasar un conjunto variable variable por vértice al sombreador de fragmentos?

Literalmente, cada tutorial que encuentro utiliza las palabras clave varying/ attributey eso no es útil.

Avi
fuente

Respuestas:

65

Los calificadores de almacenamiento iny en outrealidad tienen un propósito que contiene y reemplaza el de varyingy 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 inpara el sombreador de vértices
  • varying: igual que outpara el sombreador de vértices, igual que inpara 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 .

Eric
fuente
2
@NicolBolas Ha! Ya pensé que había algo sospechoso con eso. Eso es un error en esa tarjeta de referencia entonces. ¡Gracias! :-)
Eric