parole chiave in / out in GLSL


46

Non capisco davvero come usare le parole chiave in/ outin GLSL e google è insolitamente inutile.

Cosa fanno esattamente? Come li userei se, ad esempio, voglio passare una variabile variabile impostata per vertice allo shader di frammenti?

Letteralmente ogni tutorial che trovo usa le parole chiave varying/ attributee questo non è utile.

Risposte:


65

Le qualificazioni di stoccaggio ine outin realtà hanno uno scopo che contiene e sostituisce quella di varyinge attribute. Definiscono quali variabili sono rispettivamente in put e out per lo shader. Vedere la scheda di riferimento GLSL 4.2 a pagina 7:

  • in: collegamento allo shader della fase precedente
  • out: collegamento da uno shader alla fase successiva
  • attribute: uguale inal vertex shader
  • varying: come outper lo shader di vertice, come inper lo shader di frammenti (Nota: questi sono erroneamente capovolti nella scheda di riferimento sopra menzionata.)

Con la nota a margine che gli ultimi due sono in qualche modo deprecati: non sono presenti nel profilo centrale 4.2, ma solo nel profilo di compatibilità.


Cosa fanno esattamente?

Per quanto riguarda l'uso, prendi lo shader di vertice da un'introduzione al moderno OpenGL. Capitolo 2.2: Shader :

#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);
}

Dovrebbe essere riscritto in 4.2 core come:

#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);
}

Tutorial inutili

Immagino che il motivo principale per cui trovi un codice tutorial "obsoleto" è che non tutti hanno accesso all'hardware compatibile con GLSL 3.3+. Indipendentemente da ciò, per un tutorial buono e più aggiornato ti indicherò volentieri nella direzione della moderna programmazione grafica 3D di Nicol Bolas .


2
@NicolBolas Ha! Ho già pensato che ci fosse qualcosa di sospetto in questo. Questo è un errore in quella carta di riferimento allora. Grazie! :-)
Eric,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.