- GLSL
-
Die OpenGL Shading Language (kurz: GLSL oder glSlang) ist eine Programmiersprache, um mit OpenGL auf dem Grafikprozessor eigene Programme, sogenannte Shader, auszuführen. Diese können die sonst stark limitierten und festen Verarbeitungsvorschriften der Grafikkarte (Grafikpipeline) teilweise ersetzen.
GLSL ist Teil der OpenGL-Spezifikation, die den Funktionsumfang von OpenGL definieren. glSlang wurde offiziell ab der OpenGL-Version 2.0 eingeführt. In OpenGL 1.4 ist es jedoch schon als Extension enthalten.
Inhaltsverzeichnis
Sprachmerkmale
GLSL ist eine C-ähnliche Programmiersprache, die speziell an die Notwendigkeiten von Shadern angepasst wurde. So gibt es eingebaute Typen für Vektoren, SIMD und Anbindungen an die OpenGL Umgebung.
Es gibt zwei verschiedene Arten von Shadern, die mit GLSL definiert werden können. Dies sind die Vertex-Shader und die Fragmentshader. Ein Vertex-Shader wird für jedes Vertex einmal ausgeführt, während ein Fragmentshader für jedes Fragment einmal läuft. Fragmentshader sind das Äquivalent zu Direct3Ds Pixelshader.
Im Detail kann die Standardfunktionalität, die vor der Rasterisierung stattfindet, durch Vertex-Shader ersetzt werden. Die danach vorliegenden Fragmente (Pixel bevor sie auf dem Anzeigegerät angezeigt werden) werden dann mittels der Fragmentshader bearbeitet. Hier wird die Farbe für das entsprechende Fragment berechnet.
Der Vertex-Shader wird in jedem Frame auf jedem Vertex ausgeführt und hat dabei nur Zugriff auf den gerade behandelten Vertex (inkl. seiner Texturkoordinaten, Normalen und sonstiger übergebener Daten), aber nicht etwa auf Nachbar-Vertices, die Topologie oder Ähnliches.
Beispiele
Vertexshader
Dieser Vertexshader verhält sich ähnlich wie der unveränderte Vertexshader der Grafikkarte. Die Vordergrundfarbe wird gesetzt und die Standardfunktion
ftransform()
führt die gewöhnliche Vertex-Transformation (sogenannte Fixed Function, in der Grafikkarte festgelegte Berechnungen) durch.void main(void) { gl_FrontColor = gl_Color; gl_Position = ftransform(); }
Fragmentshader
Dieser einfache Fragmentshader setzt die Fragmentfarbe auf die mit glColor festgelegte Farbe.
void main(void) { gl_FragColor = gl_Color; }
Literatur
- Rost, Randi. OpenGL Shading Language. 1st ed. Pearson Education, Inc, 2004. ISBN 0321197895
Weblinks
Wikimedia Foundation.