Die OpenGL Shading Language (GLSL) ist die Shader-Sprache der Grafik-API OpenGL. Sie wurde vom OpenGL ARB (Architecture Review Board) entworfen, hat eine C-ähnliche Syntax und läuft direkt auf der Grafikkarte (GPU). GLSL 1.10 erschien 2004 zusammen mit OpenGL 2.0; seit OpenGL 3.3 (2010) sind die Versionsnummern beider Spezifikationen synchronisiert, aktuell GLSL 4.60.
Shader-Stufen
Ein GLSL-Programm besteht aus mehreren getrennt kompilierten Shader-Stufen. Seit OpenGL 4.3 (GLSL 4.30) sind alle fünf klassischen Stufen verfügbar:
- Vertex-Shader (vert): verarbeitet jeden Eckpunkt, z. B. Transformation der Position
- Tessellation-Shader: Tessellation Control (tc) und Tessellation Evaluation (te) unterteilen Geometrie
- Geometry-Shader (geom): erzeugt oder verändert ganze Primitiven
- Fragment-Shader (frag): berechnet die Farbe jedes Pixels
- Compute-Shader (comp): allgemeine GPU-Berechnungen unabhängig vom Rendering
Grundgerüst
Die #version-Direktive steht immer in der ersten Zeile. Qualifier wie in, out und uniform legen fest, wie Daten zwischen Shader-Stufen und Anwendung fließen.
#version 330 core
in vec3 aPos;
uniform mat4 uMVP;
void main() {
gl_Position = uMVP * vec4(aPos, 1.0);
}
Wichtige Bausteine
- Vektoren und Matrizen:
vec2/vec3/vec4,mat3/mat4, Komponentenzugriff über.xyzoder.rgba - Texturen:
sampler2D, Abtastung mittexture(tex, uv) - Built-ins:
gl_Position(Vertex-Ausgabe),gl_FragCoord(Pixel-Koordinaten),gl_VertexID,gl_FragDepth; in älteren Versionengl_FragColor - Kontrollstrukturen wie in C:
if/else,for,while,switch,discardverwirft ein Fragment
GLSL ES
Für mobile Geräte und das Web gibt es die Variante GLSL ES, die Grundlage von WebGL 1/2 und WebGPU. Sie verzichtet auf einige Desktop-Funktionen und ist an die GPU-Hardware von Smartphones angepasst.
GLSL ist eng mit HLSL (DirectX) und Cg (Nvidia) verwandt, den Shader-Sprachen der konkurrierenden APIs. Grundlagen zu Grafikprozessoren liefert der Artikel GPU, für Nvidias Rechen-Plattform siehe CUDA.