Computergrafik

GLSL Datentypen

GLSL Syntax | | GLSL Konstruktoren, Selektoren, Swizzles

Datentypen von GLSL sind Skalare, Vektoren und Matrizen (Arrays von Vektoren).

Beispiele:

bool b;   // Boolscher Wert (selten benutzt)
int i;    // Integer-Typ (norm. nicht verwenden!)
float a;  // Einfache Genauigkeit
double b; // Doppelte Genauigkeit (norm. nicht verwenden!)
//sampler*// Werden später vorgestellt

vec3 x;   // 3D Vektor
vec4 y;   // 4D Vektor

mat3x3 m; // 3x3 Matrix; auch: mat3 m;
mat4x4 m; // 4x4 Matrix; auch: mat4 m;
mat2x4 m; // 2x4 Matrix (norm. nicht verwenden!)

GLSL ist 100% typ-sicher. Es ist nicht erlaubt Variablen unterschiedlichen Datentyps einander zuzuweisen, d.h. implizite Konvertiertung ist nicht unterstützt. Zum Beispiel ist es nicht erlaubt einen Integer-Wert an eine float-Variable ohne Cast zuzuweisen. Das Casting erfolgt ausnahmslos mit einem entsprechenden Konstruktor.

Es existieren auch Arrays; es wird empfohlen sie nur in Ausnahmefällen zu nutzen.

GLSL Qualifier

Typen ohne Qualifier geben wie gewohnt lokale Variablen (für Zwischenergebnisse) an. Echte globale Variablen existieren nicht (da mehrere Pixel gleichzeitig berechnet werden). Die (teilweise legacy) Eingabe-Variablen gl_Vertex, gl_Normal, gl_FragCoord und Ausgabe-Variablen gl_Position, gl_FragColor sind nur Pseudo-globale Variablen.

Mögliche Qualifier:

  • const
    Konstanten
  • uniform
    Variablen, die sich nur zwischen DrawArray()-Aufrufen ändern können
  • attribute
    Variablen, über die bei jedem Vertex ein neuer Parameter übergeben wird
  • varying
    Variablen, die ausschließlich dazu dienen, Daten vom Vertex-Shader zu interpolieren und dem Fragment-Shader zukommen zu lassen

Zusätzliche Qualifier in neueren GLSL-Versionen (nach 1.20):

  • Interpolations-Qualifier: flat noperspective smooth
  • Location-Qualifier: layout (location=1)


GLSL Syntax | | GLSL Konstruktoren, Selektoren, Swizzles

Options: