Zum Inhalt springen

„OpenGL Shading Language“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K Kommasetzung
 
(25 dazwischenliegende Versionen von 16 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
|Erscheinungsjahr = 2002
|Erscheinungsjahr = 2002
|Entwickler = [[Khronos Group]]
|Entwickler = [[Khronos Group]]
|AktuelleVersion = 4.40
|AktuelleVersion = 4.60
|AktuelleVersionFreigabeDatum = 22. Juli 2013
|AktuelleVersionFreigabeDatum = 23. Juli 2017
|Website = [http://www.opengl.org/documentation/glsl/ www.opengl.org/documentation/glsl/]
|Website = [http://www.opengl.org/documentation/glsl/ www.opengl.org/documentation/glsl/]
|Beeinflusst_von = [[C (Programmiersprache)|C]]
|Beeinflusst_von = [[C (Programmiersprache)|C]]
Zeile 12: Zeile 12:


== Entstehung und Weiterentwicklung ==
== Entstehung und Weiterentwicklung ==
Unter Shading wird in der Computergrafik die Veränderung einzelner [[Vertex|Vertices]] bzw. [[Fragment (Computergrafik)|Fragmente]] innerhalb der [[Grafikpipeline]] bezeichnet. Die Shader berechnen das Aussehen eines Objektes oder erzeugen Spezialeffekte. Typische Aufgaben sind beispielsweise die [[Texture Mapping|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.
Unter Shading wird in der Computergrafik die Veränderung einzelner [[Vertex|Vertices]] bzw. [[Fragment (Computergrafik)|Fragmente]] innerhalb der [[Grafikpipeline]] bezeichnet. Die Shader berechnen das Aussehen eines Objektes oder erzeugen Spezialeffekte. Typische Aufgaben sind beispielsweise die [[Texture Mapping|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-Shader|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-Shader|Tessellation-Control-]] und [[Tessellation-Evaluation-Shaders]] und mit der Version 4.3 um den [[Compute-Shader]] ergänzt. <ref>The OpenGL® Shading Language Version: 4.30 ([http://www.opengl.org/registry/doc/GLSLangSpec.4.30.7.pdf PDF])</ref>
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-Shader|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-Shader|Tessellation-Control-]] und [[Tessellation-Evaluation-Shaders]] und mit der Version 4.3 um den [[Compute-Shader]] ergänzt.<ref>[http://www.opengl.org/registry/doc/GLSLangSpec.4.30.7.pdf Sprachspezifikation, Version 4.30] (PDF; 830 kB; englisch)</ref>


Mit der heutigen auf GLSL basierten Pipeline lassen sich, mit Ausnahme der [[Rasterisierung]], alle Verarbeitungsschritte der Grafikkarte direkt programmieren.
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 [[OpenGL_ES_Shading_Language|GLSL ES]] aufgenommen. Diese sind ausschließlich für die Portabilität mit [[OpenGL_ES|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.
In die Spezifikation von GLSL wurden auch Schlüsselwörter (Präzisions-Qualifizierer) der Tochterprogrammiersprache [[OpenGL ES Shading Language|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.
GLSL steht in Konkurrenz zu [[High Level Shading Language|HLSL]], welches die äquivalente Funktionalität für [[Direct3D]] bereitstellt.


== Sprachmerkmale ==
== Sprachmerkmale ==
GLSL ist eine [[C (Programmiersprache)|C]]-ähnliche Programmiersprache, die speziell an die Notwendigkeiten von Shadern angepasst wurde. So gibt es eingebaute Typen für [[Vektor]]en, [[Matrix (Mathematik)|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 (Informatik)|Zeiger]] (Pointer).
GLSL ist eine [[C (Programmiersprache)|C]]-ähnliche Programmiersprache, die speziell an die Notwendigkeiten von Shadern angepasst wurde. So gibt es eingebaute Typen für [[Vektor]]en, [[Matrix (Mathematik)|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 (Informatik)|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.
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:
Jedes Primitiv, welches die Applikation zeichnen will, passiert nun die im Shaderprogramm enthaltenen Shader in der folgenden Reihenfolge:


=== 1. Vertexshader ===
=== 1. Vertexshader ===
Zeile 33: Zeile 33:


=== 2. Tessellationshader ===
=== 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-Shaders unterschieden.
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 ===
=== 3. Geometryshader ===
Zeile 39: Zeile 39:


=== 4. Fragmentshader ===
=== 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.
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 [[Direct3D]]s Pixelshader.
Fragmentshader sind das Äquivalent zu [[Direct3D]]s Pixelshader.


=== Compute-Shader ===
=== Compute-Shader ===
Dieser Shadertypus kann unabhängig von der Grafikpipeline Daten bearbeiten und somit GPGPU Berechnungen im OpenGL Context ausführen.
Dieser Shadertypus kann unabhängig von der Grafikpipeline Daten bearbeiten und somit [[General Purpose Computation on Graphics Processing Unit|GPGPU]]-Berechnungen im OpenGL-Context ausführen.


== Beispiel ==
== Beispiel ==
Zeile 51: Zeile 51:
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 (<code>gl_Color</code>) und die Matrix <code>gl_ModelViewProjectionMatrix</code> positioniert den Vertex (<code>gl_Vertex</code>) relativ zur Kamera im Raum.
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 (<code>gl_Color</code>) und die Matrix <code>gl_ModelViewProjectionMatrix</code> positioniert den Vertex (<code>gl_Vertex</code>) relativ zur Kamera im Raum.


<source lang="glsl">
<syntaxhighlight lang="glsl">
void main(void)
void main(void)
{
{
gl_FrontColor = gl_Color;
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
}
</syntaxhighlight>
</source>


=== Fragmentshader ===
=== Fragmentshader ===
Dieser einfache Fragmentshader ignoriert die Eingangsfarbe (<code>gl_Color</code>) und setzt die Fragmentfarbe auf rot.
Dieser einfache Fragmentshader ignoriert die Eingangsfarbe (<code>gl_Color</code>) und setzt die Fragmentfarbe auf rot.


<source lang="glsl">
<syntaxhighlight lang="glsl">
void main(void)
void main(void)
{
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
}
</syntaxhighlight>
</source>


== Versionsgeschichte ==
== Versionsgeschichte ==
Zeile 76: Zeile 76:
|- class="hintergrundfarbe5"
|- class="hintergrundfarbe5"
! Version
! Version
! style="min-width: 10em;"| Veröffentlichung
!style="min-width:10em;"| Veröffentlichung
! Beschreibung / Änderungen
! Beschreibung / Änderungen
|-
|-
| {{Version|o|1.10}}
| {{Version|o|1.10}}
| 30. April 2004
| 30. April 2004
|
|
* OpenGL 2.0
* OpenGL 2.0
* erste Veröffentlichung
* erste Veröffentlichung
Zeile 93: Zeile 93:
* Invariante Werte aus gleichen Ausdrücken verschiedener Programme
* Invariante Werte aus gleichen Ausdrücken verschiedener Programme
* Außenprodukt einer linearen algebraischen Matrixmultiplikation
* Außenprodukt einer linearen algebraischen Matrixmultiplikation
* transponieren einer Matrix
* Transponieren einer Matrix
* Koordinaten des aktuelle Fragment innerhalb eines Punkt-Primitiv
* Koordinaten des aktuellen Fragments innerhalb eines Punkt-Primitiv
|-
|-
| {{Version|o|1.30}}
| {{Version|o|1.30}}
| 11. August 2008
| 11. August 2008
|
|
* OpenGL 3.0
* OpenGL 3.0
* Mehrfachauswahl
* Mehrfachauswahl
* Ganzzahlige Textur-Datentypen
* Ganzzahlige Textur-Datentypen
* Vorzeichenlose Ganzahl-, Vektor- und Textur-Datentypen
* Vorzeichenlose Ganzzahl-, Vektor- und Textur-Datentypen
* nicht-perspektivische lineare Interpolation und Nicht-Interpolation
* nicht-perspektivische lineare Interpolation und Nicht-Interpolation
* hyperbolische Winkel-Funktionen
* hyperbolische Winkel-Funktionen
* abscheiden und runden von Gleitkommazahlen
* abschneiden und runden von Gleitkommazahlen
|-
|-
| {{Version|o|1.40}}
| {{Version|o|1.40}}
| 24. März 2009
| 24. März 2009
|
|
* OpenGL 3.1
* OpenGL 3.1
* Format-Layout für Variablen-Deklaration
* Format-Layout für Variablen-Deklaration
Zeile 116: Zeile 116:
| {{Version|o|1.50}}
| {{Version|o|1.50}}
| 3. August 2009
| 3. August 2009
|
|
* OpenGL 3.2
* OpenGL 3.2
* Wahl zwischen Kern-Profil und Kompatibilitäts-Profil
* Wahl zwischen Kern-Profil und Kompatibilitäts-Profil
Zeile 126: Zeile 126:
|
|
* OpenGL 3.3
* OpenGL 3.3
* Konvertierung zwischen Ganzahlen und Gleitkommazahlen mit Beibehaltung der Bit-Level-Darstellung
* Konvertierung zwischen Ganzzahlen und Gleitkommazahlen mit Beibehaltung der Bit-Level-Darstellung
|-
|-
| {{Version|o|4.00}}
| {{Version|o|4.00}}
| 11. März 2010
| 11. März 2010
|
|
* OpenGL 4.0
* OpenGL 4.0
* Gleitkommazahlen-Datentyp mit doppelter Genauigkeit
* Gleitkommazahlen-Datentyp mit doppelter Genauigkeit
* Packen und Entpacken von Gleitkommazahlen
* Packen und Entpacken von Gleitkommazahlen
* Tessalation-Shader
* Tesselation-Shader
|-
|-
| {{Version|o|4.10}}
| {{Version|o|4.10}}
| 26. Juli 2010
| 26. Juli 2010
|
|
* OpenGL 4.1
* OpenGL 4.1
|-
|-
| {{Version|o|4.20}}
| {{Version|o|4.20}}
| 8. August 2011
| 8. August 2011
|
|
* OpenGL 4.2
* OpenGL 4.2
* Zugriffskontrolle von Speichervariablen
* Zugriffskontrolle von Speichervariablen
Zeile 150: Zeile 150:
| {{Version|o|4.30}}
| {{Version|o|4.30}}
| 6. August 2012
| 6. August 2012
|
|
* OpenGL 4.3
* OpenGL 4.3
* Compute-Shader
* Compute-Shader
|-
|-
| {{Version|c|4.40}}
| {{Version|o|4.40}}
| 22. Juli 2013
| 22. Juli 2013
|
|
* OpenGL 4.4
* OpenGL 4.4

|-
| {{Version|o|4.50}}
| 20. Juli 2014
|
* OpenGL 4.5
* Kompatibilitätsprofil zu OpenGL ES 3.1
* Erweiterte Kontrolle der Berechnung von Ableitungen
|-
| {{Version|c|4.60}}
| 23. Juli 2017
|
* OpenGL 4.6
* Unterstützung für OpenGL SPIR-V
|-
|-
|}
|}


== Literatur ==
== Literatur ==
* Rost, Randi. ''OpenGL Shading Language''. 1st ed. Pearson Education, Inc, 2004. ISBN 0321197895
* Randi Rost: ''OpenGL Shading Language''. 1st ed. Pearson Education, 2004, ISBN 0-321-19789-5.
* Ihde, Heiko. ''Shader mit GLSL: Eine Einführung in die OpenGL Shading Language''. 1st ed. Diplomica, 2009. ISBN 3836679272
* Heiko Ihde: ''Shader mit GLSL: Eine Einführung in die OpenGL Shading Language''. 1st ed. Diplomica, 2009, ISBN 3-8366-7927-2.

== Einzelnachweise ==
<references/>


== Weblinks ==
== Weblinks ==
* [http://www.opengl.org/registry/doc/GLSLangSpec.4.40.pdf The OpenGL® Shading Language Version 4.40 - Offizielle Spezifikation] (''PDF''; 834 kB)
* [https://www.opengl.org/registry/doc/GLSLangSpec.4.60.pdf Sprachspezifikation, Version 4.60] (PDF; 915 kB; englisch)
* [http://www.lighthouse3d.com/opengl/glsl/index.php?intro www.lighthouse3d.com - OpenGL Shading Language Tutorial] (''englisch'')
* [http://www.lighthouse3d.com/tutorials/ OpenGL Shading Language Tutorial] lighthouse3d.com (englisch)
* [http://nopper.tv/opengl.html OpenGL with GLSL 3.x/4.x]
* [http://glslsandbox.com/ OpenGL Shading Language Beispiele, interaktiv veränderbar!]

== Einzelnachweise ==
<references />


{{Normdaten|TYP=s|GND=7673247-2}}
{{Normdaten|TYP=s|GND=7673247-2}}

Aktuelle Version vom 1. Mai 2024, 09:54 Uhr

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

[Bearbeiten | Quelltext bearbeiten]

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.

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

[Bearbeiten | Quelltext bearbeiten]

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

[Bearbeiten | Quelltext bearbeiten]

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

[Bearbeiten | Quelltext bearbeiten]

Im Geometryshader können aus einem bestehenden Primitiv (Punkt, Linie, Dreieck) neue Primitive erstellt werden.

4. Fragmentshader

[Bearbeiten | Quelltext bearbeiten]

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.

Dieser Shadertypus kann unabhängig von der Grafikpipeline Daten bearbeiten und somit GPGPU-Berechnungen im OpenGL-Context ausführen.

Ein Beispiel eines GLSL-Programms aus einem Vertex- und einem Fragmentshader. Das Programm erzeugt eine rote Silhouette aller Objekte.

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;
  }

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

[Bearbeiten | Quelltext bearbeiten]
Legende: Alte Version Ältere Version; noch unterstützt Aktuelle Version Aktuelle Vorabversion Zukünftige Version
Version Veröffentlichung Beschreibung / Änderungen
Ältere Version; nicht mehr unterstützt: 1.10 30. April 2004
  • OpenGL 2.0
  • erste Veröffentlichung
Ältere Version; nicht mehr unterstützt: 1.20 2. August 2006
  • OpenGL 2.1
  • Nichtquadratische Matrizen
  • Schwerpunkts-basierte Interpolation zwischen Vertex- und Fragment-Shader
  • Invariante Werte aus gleichen Ausdrücken verschiedener Programme
  • Außenprodukt einer linearen algebraischen Matrixmultiplikation
  • Transponieren einer Matrix
  • Koordinaten des aktuellen Fragments innerhalb eines Punkt-Primitiv
Ältere Version; nicht mehr unterstützt: 1.30 11. August 2008
  • OpenGL 3.0
  • Mehrfachauswahl
  • Ganzzahlige Textur-Datentypen
  • Vorzeichenlose Ganzzahl-, Vektor- und Textur-Datentypen
  • nicht-perspektivische lineare Interpolation und Nicht-Interpolation
  • hyperbolische Winkel-Funktionen
  • abschneiden und runden von Gleitkommazahlen
Ältere Version; nicht mehr unterstützt: 1.40 24. März 2009
  • OpenGL 3.1
  • Format-Layout für Variablen-Deklaration
  • Invertieren einer Matrix
Ältere Version; nicht mehr unterstützt: 1.50 3. August 2009
  • OpenGL 3.2
  • Wahl zwischen Kern-Profil und Kompatibilitäts-Profil
  • determinieren einer Matrix
  • Geometry-Shader
Ältere Version; nicht mehr unterstützt: 3.30 11. März 2010
  • OpenGL 3.3
  • Konvertierung zwischen Ganzzahlen und Gleitkommazahlen mit Beibehaltung der Bit-Level-Darstellung
Ältere Version; nicht mehr unterstützt: 4.00 11. März 2010
  • OpenGL 4.0
  • Gleitkommazahlen-Datentyp mit doppelter Genauigkeit
  • Packen und Entpacken von Gleitkommazahlen
  • Tesselation-Shader
Ältere Version; nicht mehr unterstützt: 4.10 26. Juli 2010
  • OpenGL 4.1
Ältere Version; nicht mehr unterstützt: 4.20 8. August 2011
  • OpenGL 4.2
  • Zugriffskontrolle von Speichervariablen
  • Packen und Entpacken von Ganzzahlen
Ältere Version; nicht mehr unterstützt: 4.30 6. August 2012
  • OpenGL 4.3
  • Compute-Shader
Ältere Version; nicht mehr unterstützt: 4.40 22. Juli 2013
  • OpenGL 4.4
Ältere Version; nicht mehr unterstützt: 4.50 20. Juli 2014
  • OpenGL 4.5
  • Kompatibilitätsprofil zu OpenGL ES 3.1
  • Erweiterte Kontrolle der Berechnung von Ableitungen
Aktuelle Version: 4.60 23. Juli 2017
  • OpenGL 4.6
  • Unterstützung für OpenGL SPIR-V
  • 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.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Sprachspezifikation, Version 4.30 (PDF; 830 kB; englisch)