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:
- gl_Vertex
- selbst benannte Attribute (glBindAttribLocation)
Ausgaben:
- gl_Position
- 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:
- gl_FragCoord
- selbst benannte interpolierte Attribute (varying)
Ausgaben:
- 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 →