OpenGL Shading Language
Die OpenGL Shading Language (kurz: GLSL oder glSlang) ist eine Programmiersprache, um mittels OpenGL auf dem Grafikprozessor eigene Programme, sogenannte Shader…
| OpenGL Shading Language | |
|---|---|
| Basisdaten | |
| Erscheinungsjahr: | 2002 |
| Entwickler: | Khronos Group |
| Aktuelle Version: | 4.60 (23. Juli 2017) |
| Beeinflusst von: | C |
| www.opengl.org/documentation/glsl/ | |
Die OpenGL Shading Language (kurz: GLSL oder glSlang) ist eine Programmiersprache, um mittels OpenGL auf dem Grafikprozessor eigene Programme, sogenannte Shader, auszuführen.
Entstehung und Weiterentwicklung
Unter Shading wird in der Computergrafik die Veränderung einzelner Vertices bzw. Fragmente innerhalb der Grafikpipeline bezeichnet. Die Shader berechnen das Aussehen eines Objektes oder erzeugen Spezialeffekte. Typische Aufgaben sind beispielsweise die Texturierung und die Beleuchtung. In der klassischen (sogenannte Fixed Function) OpenGL-Pipeline sind die einzelnen Berechnungsschritte des Shaders unveränderbar und es können nur einzelne Parameter konfiguriert werden. Um diese Limitierung zu überwinden, wurde in der OpenGL-Version 1.4 GLSL als Extension eingeführt. GLSL erlaubt es Teile der Pipeline mittels eigener Programme frei zu definieren. So kann z. B. ein spezielles Beleuchtungsmodell oder ein Textureffekt wie Bumpmapping implementiert werden.
Mit der OpenGL-Version 2.0 wurde die Sprache ein offizieller Bestandteil der OpenGL-Spezifikation, die den Funktionsumfang von OpenGL definiert. Die initiale GLSL-Version bot nur einen Vertex- und Fragment-Shader. Mit der OpenGL-Version 3.2 wurde sie um den Geometry-Shader, mit der Version 4.0 um den Tessellation-Control- und Tessellation-Evaluation-Shaders und mit der Version 4.3 um den Compute-Shader ergänzt.[1]
Mit der heutigen auf GLSL basierten Pipeline lassen sich, mit Ausnahme der Rasterung, alle Verarbeitungsschritte der Grafikkarte direkt programmieren.
In die Spezifikation von GLSL wurden auch Schlüsselwörter (Präzisions-Qualifizierer) der Tochterprogrammiersprache GLSL ES aufgenommen. Diese sind ausschließlich für die Portabilität mit OpenGL ES und möglichen Erweiterungen vorgesehen, haben als solches aber keine Funktion oder Bedeutung in GLSL. Die Funktionalitäten von GLSL ES sind in einer eigenständigen Spezifikation beschrieben und ist somit kein Bestandteil von GLSL.
GLSL steht in Konkurrenz zu HLSL, welches die äquivalente Funktionalität für Direct3D bereitstellt.
Sprachmerkmale
GLSL ist eine C-ähnliche Programmiersprache, die speziell an die Notwendigkeiten von Shadern angepasst wurde. So gibt es eingebaute Typen für Vektoren, Matrizen und eine Vielzahl von Mathematik- und Grafikfunktionen. Viele der angebotenen Operationen können auf mehreren Datenelementen gleichzeitig arbeiten (SIMD). Im Unterschied zu C gibt es jedoch keine Zeiger (Pointer).
Es gibt fünf unterschiedliche GLSL-Shadertypen; Vertex-, Tessellation-, Geometry- und Fragmentshader als Teil der Rendering-Pipeline und die davon unabhängigen Compute-Shader. Jeder Shadertyp hat charakteristische Ein- und Ausgabeparameter. Der Applikationsentwickler übergibt dem OpenGL-Treiber für jeden Shadertyp den Shader-Quellcode sowie alle zusätzlichen Variablen und Konstanten. Der Treiber kompiliert und linkt die Shader zu einem Shaderprogramm. Es sind nicht zwingend alle Shadertypen zu nutzen.
Jedes Primitiv, welches die Applikation zeichnen will, passiert nun die im Shaderprogramm enthaltenen Shader in der folgenden Reihenfolge:
1. Vertexshader
Für jeden Vertex wird der Vertexshader einmal ausgeführt. Der Shader 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.
2. Tessellationshader
In den Tessellationshadern kann eine Fläche (Dreieck oder Viereck) in kleinere Flächen unterteilt werden. Bei der Implementierung wird zwischen Tessellation-Control-Shader und Tessellation-Evaluation-Shader unterschieden.
3. Geometryshader
Im Geometryshader können aus einem bestehenden Primitiv (Punkt, Linie, Dreieck) neue Primitive erstellt werden.
4. Fragmentshader
Der Fragmentshader wird für jedes Fragment (Pixel, bevor sie auf dem Anzeigegerät angezeigt werden) einmal ausgeführt. Hier wird die Farbe für das entsprechende Fragment berechnet. Fragmentshader sind das Äquivalent zu Direct3Ds Pixelshader.
Compute-Shader
Dieser Shadertypus kann unabhängig von der Grafikpipeline Daten bearbeiten und somit GPGPU-Berechnungen im OpenGL-Context ausführen.
Beispiel
Ein Beispiel eines GLSL-Programms aus einem Vertex- und einem Fragmentshader. Das Programm erzeugt eine rote Silhouette aller Objekte.
Vertexshader
Dieser Vertexshader verhält sich wie die klassische (Fixed Function) OpenGL-Pipeline. Er setzt die Vordergrundfarbe des Vertex auf die von der Applikation spezifizierte Farbe (gl_Color) und die Matrix gl_ModelViewProjectionMatrix positioniert den Vertex (gl_Vertex) relativ zur Kamera im Raum.
void main(void)
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Fragmentshader
Dieser einfache Fragmentshader ignoriert die Eingangsfarbe (gl_Color) und setzt die Fragmentfarbe auf rot.
void main(void)
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
Versionsgeschichte
| Legende: | Alte Version | Aktuelle Version |
|---|
| Version | Veröffentlichung | Beschreibung / Änderungen |
|---|---|---|
| 1.10 | 30. April 2004 |
|
| 1.20 | 2. August 2006 |
|
| 1.30 | 11. August 2008 |
|
| 1.40 | 24. März 2009 |
|
| 1.50 | 3. August 2009 |
|
| 3.30 | 11. März 2010 |
|
| 4.00 | 11. März 2010 |
|
| 4.10 | 26. Juli 2010 |
|
| 4.20 | 8. August 2011 |
|
| 4.30 | 6. August 2012 |
|
| 4.40 | 22. Juli 2013 |
|
| 4.50 | 20. Juli 2014 |
|
| 4.60 | 23. Juli 2017 |
|
Literatur
- Randi Rost: OpenGL Shading Language. 1st ed. Pearson Education, 2004, ISBN 0-321-19789-5.
- Heiko Ihde: Shader mit GLSL: Eine Einführung in die OpenGL Shading Language. 1st ed. Diplomica, 2009, ISBN 3-8366-7927-2.
Weblinks
- Sprachspezifikation, Version 4.60 (PDF; 915 kB; englisch)
- OpenGL Shading Language Tutorial lighthouse3d.com (englisch)
- OpenGL Shading Language Beispiele, interaktiv veränderbar!
Einzelnachweise
- ↑ Sprachspezifikation, Version 4.30 (PDF; 830 kB; englisch)
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.