Computergrafik

GLSL Basissyntax

GLSL | | GLSL unter OpenGL

GLSL Version

Wie auch OpenGL existiert GLSL bereits lange genug, um in mehreren (inkompatiblen) Versionen vorzukommen. Die Unterschiede zwischen verschiedenen Versionen sind mehr oder weniger subtil.

Derzeit existieren Version 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 3.30, 4.00, 4.10, 4.20, 4.30, 4.40. Kleinster gemeinsamer Nenner derzeit: Version 1.20

Aufbau

Erste (wichtige!) Anweisung in einem Shader: Angabe der Version

#version 120

Dann folgt die Hauptfunktion (main()) in einer C-ähnlichen Syntax.

Es existieren (u.a.) die Datentypen float, vec3, vec4, mat4.

Operatoren wie in C; Vektoren und Matrizen werden bezüglich Operatoren recht intuitiv verwendet, näheres dazu in einem späteren Kapitel.

Ein-/Ausgaben

Vertex-Shader:

Eingaben:

  1. gl_Vertex
  2. selbst benannte Attribute (glBindAttribLocation)

Ausgaben:

  1. gl_Position
  2. selbst benannte Attribute (varying)

Der einfachste Shader kopiert die ĂĽbergebene Vertex-Position an die Rasterisiereinheit, ohne Ă„nderung.

#version 120
void main()
{
   gl_Position = gl_Vertex;   // im Framework vertex_position
}

Fragment-Shader:

Eingaben:

  1. gl_FragCoord
  2. selbst benannte interpolierte Attribute (varying)

Ausgaben:

  1. gl_FragColor, gl_FragDepth

Der einfachste Shader setzt einfach eine feste Farbe.

#version 120
void main()
{
   gl_FragColor = vec4 (1.0f, 0.0f, 0.0f, 1.0f);
}

Oder benutzt die aktuelle Pixelposition als Farbe (Skalierung!)

#version 120
void main()
{
   gl_FragColor = gl_FragCoord * 0.004;
}


GLSL | | GLSL unter OpenGL

Options: