Zum Inhalt springen

„OpenGL ES Shading Language“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K typo
 
(13 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
|Erscheinungsjahr = 2009
|Erscheinungsjahr = 2009
|Entwickler = [[Khronos Group]]
|Entwickler = [[Khronos Group]]
|AktuelleVersion = 3.00
|AktuelleVersion = 3.20
|AktuelleVersionFreigabeDatum = 11. Juli 2012
|AktuelleVersionFreigabeDatum = 6. August 2015
|Website = [http://www.khronos.org/opengles/ www.khronos.org/opengles/]
|Website = [http://www.khronos.org/opengles/ www.khronos.org/opengles/]
|Beeinflusst_von = [[OpenGL_Shading_Language|OpenGL Shading Language]] und [[C (Programmiersprache)|C]]
|Beeinflusst_von = [[OpenGL Shading Language]] und [[C (Programmiersprache)|C]]
}}
}}


Die '''OpenGL ES Shading Language''' (kurz: ''GLSL ES'') ist eine [[Programmiersprache]], mit der programmierbare Einheiten eines [[Grafikprozessor|Grafikprozessors]], sogenannte [[Shader]], erstellt werden. Diese Shader werden kompiliert, miteinander zu einem fertigen Programm verbunden und mittels [[OpenGL ES]] auf eingebetteten Systemen ausgeführt.
Die '''OpenGL ES Shading Language''' (kurz: ''GLSL ES'') ist eine [[Programmiersprache]], mit der programmierbare Einheiten eines [[Grafikprozessor]]s, sogenannte [[Shader]], erstellt werden. Diese Shader werden kompiliert, miteinander zu einem fertigen Programm verbunden und mittels [[OpenGL ES]] auf eingebetteten Systemen ausgeführt.


== Sprachmerkmale ==
== Sprachmerkmale ==
GLSL ES basiert auf der [[OpenGL_Shading_Language|OpenGL Shading Language (GLSL)]] und ist als solches auch eine [[C (Programmiersprache)|C]]-ähnliche Programmiersprache. Im Gegensatz zu GLSL gibt es in der aktuellen Version von GLSL ES nur zwei Shadertypen, einen [[Vertex-Shader|Vertex-]] und [[Fragment-Shader]], weniger Texture-Datentypen (Sampler), und bietet wesentlich weniger eingebaute Variablen und Funktionen an. Darüber hinaus kann allerdings mittels Precision-Qualifier die minimale Reichweite und Genauigkeit eines Gleitkomma- oder Ganzzahl-Datentyps bestimmt werden.
GLSL ES basiert auf der [[OpenGL Shading Language]] (GLSL) und ist als solches auch eine [[C (Programmiersprache)|C]]-ähnliche Programmiersprache. Im Gegensatz zu GLSL gibt es in der aktuellen Version von GLSL ES weniger Texture-Datentypen (Sampler) und bietet wesentlich weniger eingebaute Variablen und Funktionen an. Darüber hinaus kann allerdings mittels Precision-Qualifier die minimale Reichweite und Genauigkeit eines Gleitkomma- oder Ganzzahl-Datentyps bestimmt werden.


== Beispiel ==
== Beispiel ==
Ein Beispiel eines GLSL-ES-Programms aus einem Vertex- und einem Fragment-Shader; das Programm zeichnet Objekte in einer zuvor definierten Farbe:
Ein Beispiel eines einfachen GLSL-ES-Programms aus einem Vertex- und einem Fragment-Shader; das Programm zeichnet Objekte in einer zuvor definierten Farbe:


=== Vertex-Shader ===
=== Vertex-Shader ===
Dieser Vertex-Shader positioniert den Vertex (<code>a_vertex</code>) mithilfe der Matrix <code>modelViewProjectionMatrix</code> relativ zur Kamera im Raum, und übergibt die von der OpenGL ES-API übergebene Farbe (a_color) weiter an den Fragment-Shader.
Dieser Vertex-Shader positioniert den Vertex (<code>a_vertex</code>) mithilfe der Matrix <code>modelViewProjectionMatrix</code> relativ zur Kamera im Raum und übergibt die von der OpenGL ES-API übergebene Farbe (a_color) weiter an den Fragment-Shader.


<source lang="glsl">
<syntaxhighlight lang="glsl">
uniform mat4 modelViewProjectionMatrix;
uniform mat4 modelViewProjectionMatrix;
attribute vec4 a_vertex;
attribute vec4 a_vertex;
Zeile 27: Zeile 27:
varying vec4 v_color;
varying vec4 v_color;


void main()
void main()
{
{
v_color = a_color;
v_color = a_color;
gl_Position = modelViewProjectionMatrix * a_vertex;
gl_Position = modelViewProjectionMatrix * a_vertex;
}
}
</syntaxhighlight>
</source>


Das selbe Beispiel in Version 3.00:
Dasselbe Beispiel in Version 3.00:


<source lang="glsl">
<syntaxhighlight lang="glsl">
#version 300 es
#version 300 es
uniform mat4 modelViewProjectionMatrix;
uniform mat4 modelViewProjectionMatrix;
in vec4 a_vertex;
layout (location = 0) in vec4 a_vertex;
in vec4 a_color;
layout (location = 1) in vec4 a_color;
out vec4 v_color;
out vec4 v_color;


void main()
void main()
{
{
v_color = a_color;
v_color = a_color;
gl_Position = modelViewProjectionMatrix * a_vertex;
gl_Position = modelViewProjectionMatrix * a_vertex;
}
}
</syntaxhighlight>
</source>


=== Fragment-Shader ===
=== Fragment-Shader ===
Dieser Fragment-Shader setzt die Zeichenfarbe des Fragments auf die von der OpenGL ES-API übergebene Farbe (<code>color</code>).
Dieser Fragment-Shader setzt die Zeichenfarbe des Fragments auf die vom Vertex-Shader übergebene Farbe.


<source lang="glsl">
<syntaxhighlight lang="glsl">
precision mediump float;
precision mediump float;
uniform vec4 color;
varying vec4 v_color;

void main()
{
gl_FragColor = v_color;
}
</syntaxhighlight>

Dasselbe Beispiel in Version 3.00

<syntaxhighlight lang="glsl">
#version 300 es
precision mediump float;
in vec4 v_color;
out vec4 my_fragcolor;

void main()
{
my_fragcolor = v_color;
}
</syntaxhighlight>

== Versionsgeschichte ==

{{Version|t|zeige=10100}}


{| class="wikitable"
void main()
|- class="hintergrundfarbe5"
{
! Version
gl_FragColor = color;
!style="min-width:10em;"| Veröffentlichung
}
! Beschreibung / Änderungen
</source>
|-
| {{Version|o|1.00}}
| 12. Mai 2009
|
* OpenGL ES 2.0
* erste Veröffentlichung
|-
| {{Version|o|3.00}}
| 11. Juli 2012
|
* OpenGL ES 3.0
* Mehrfachauswahl
* Nichtquadratische Matrizen
* Schwerpunkts-basierte Interpolation und Nicht-Interpolation zwischen Vertex- und Fragment-Shader
* Matrix-Funktionen
* Derivativ-Funktionen
* Ganzzahlige Textur-Datentypen
* Vorzeichenlose Ganzzahl-, Vektor- und Textur-Datentypen
* hyperbolische Winkel-Funktionen
* abscheiden und runden von Gleitkommazahlen
* Format-Layout für Variablen-Deklaration
* Konvertierung zwischen Ganzzahlen und Gleitkommazahlen mit Beibehaltung der Bit-Level-Darstellung
* Packen und Entpacken von Zahlen
|-
| {{Version|o|3.10}}
| 17. März 2014
|
* OpenGL ES 3.1
* Compute-Shader
* Shader-Speicherpuffer-Objekte
* Arrays von Arrays
* Atomic-Counter
* Images
* Separate Programm-Objekte (auch bekannt als separate Shader-Objekte)
* Explizite Uniform-Locations
* Texture-Gather
* Bitfield-Operationen
* Integer-Mix-Funktionen
|-
| {{Version|c|3.20}}
| 6. August 2015
|
* OpenGL ES 3.2
* Geometry-Shader
* Tessellation-Control-Shader
* Tessellation-Evaluation-Shader
|-
|}


== Weblinks ==
== Weblinks ==
* [http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf The OpenGL ES® Shading Language Version 1.00 (12. Mai 2009).] (''PDF''; 619 kB)
* [http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf GLSL-ES-Specification Version 1.00 (12. Mai 2009).] (PDF; 619 kB)
* [http://www.khronos.org/registry/gles/specs/3.0/GLSL_ES_Specification_3.00.4.pdf The OpenGL ES® Shading Language Version 3.00 (6. März 2013).] (''PDF''; 750 kB)
* [http://www.khronos.org/registry/gles/specs/3.0/GLSL_ES_Specification_3.00.4.pdf GLSL-ES-Specification Version 3.00 (6. März 2013).] (PDF; 750 kB)
* [http://www.khronos.org/registry/gles/specs/3.1/GLSL_ES_Specification_3.10.pdf GLSL-ES-Specification Version 3.10 (17. März 2014).] (PDF; 891 kB)
* [http://www.khronos.org/registry/gles/specs/3.2/GLSL_ES_Specification_3.20.pdf GLSL-ES-Specification Version 3.20 (6. August 2015).] (PDF; 1,16 MB)


{{SORTIERUNG:Opengl Es Shading Language}}
{{SORTIERUNG:Opengl Es Shading Language}}

Aktuelle Version vom 29. September 2024, 14:44 Uhr

OpenGL ES Shading Language
Basisdaten
Erscheinungsjahr: 2009
Entwickler: Khronos Group
Aktuelle Version: 3.20  (6. August 2015)
Beeinflusst von: OpenGL Shading Language und C
www.khronos.org/opengles/

Die OpenGL ES Shading Language (kurz: GLSL ES) ist eine Programmiersprache, mit der programmierbare Einheiten eines Grafikprozessors, sogenannte Shader, erstellt werden. Diese Shader werden kompiliert, miteinander zu einem fertigen Programm verbunden und mittels OpenGL ES auf eingebetteten Systemen ausgeführt.

GLSL ES basiert auf der OpenGL Shading Language (GLSL) und ist als solches auch eine C-ähnliche Programmiersprache. Im Gegensatz zu GLSL gibt es in der aktuellen Version von GLSL ES weniger Texture-Datentypen (Sampler) und bietet wesentlich weniger eingebaute Variablen und Funktionen an. Darüber hinaus kann allerdings mittels Precision-Qualifier die minimale Reichweite und Genauigkeit eines Gleitkomma- oder Ganzzahl-Datentyps bestimmt werden.

Ein Beispiel eines einfachen GLSL-ES-Programms aus einem Vertex- und einem Fragment-Shader; das Programm zeichnet Objekte in einer zuvor definierten Farbe:

Dieser Vertex-Shader positioniert den Vertex (a_vertex) mithilfe der Matrix modelViewProjectionMatrix relativ zur Kamera im Raum und übergibt die von der OpenGL ES-API übergebene Farbe (a_color) weiter an den Fragment-Shader.

uniform mat4 modelViewProjectionMatrix;
attribute vec4 a_vertex;
attribute vec4 a_color;
varying vec4 v_color;

void main()
{
  v_color = a_color;
  gl_Position = modelViewProjectionMatrix * a_vertex;
}

Dasselbe Beispiel in Version 3.00:

#version 300 es
uniform mat4 modelViewProjectionMatrix;
layout (location = 0) in vec4 a_vertex;
layout (location = 1) in vec4 a_color;
out vec4 v_color;

void main()
{
  v_color = a_color;
  gl_Position = modelViewProjectionMatrix * a_vertex;
}

Fragment-Shader

[Bearbeiten | Quelltext bearbeiten]

Dieser Fragment-Shader setzt die Zeichenfarbe des Fragments auf die vom Vertex-Shader übergebene Farbe.

precision mediump float;
varying vec4 v_color;

void main()
{
  gl_FragColor = v_color;
}

Dasselbe Beispiel in Version 3.00

#version 300 es
precision mediump float;
in vec4 v_color;
out vec4 my_fragcolor;

void main()
{
  my_fragcolor = v_color;
}

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.00 12. Mai 2009
  • OpenGL ES 2.0
  • erste Veröffentlichung
Ältere Version; nicht mehr unterstützt: 3.00 11. Juli 2012
  • OpenGL ES 3.0
  • Mehrfachauswahl
  • Nichtquadratische Matrizen
  • Schwerpunkts-basierte Interpolation und Nicht-Interpolation zwischen Vertex- und Fragment-Shader
  • Matrix-Funktionen
  • Derivativ-Funktionen
  • Ganzzahlige Textur-Datentypen
  • Vorzeichenlose Ganzzahl-, Vektor- und Textur-Datentypen
  • hyperbolische Winkel-Funktionen
  • abscheiden und runden von Gleitkommazahlen
  • Format-Layout für Variablen-Deklaration
  • Konvertierung zwischen Ganzzahlen und Gleitkommazahlen mit Beibehaltung der Bit-Level-Darstellung
  • Packen und Entpacken von Zahlen
Ältere Version; nicht mehr unterstützt: 3.10 17. März 2014
  • OpenGL ES 3.1
  • Compute-Shader
  • Shader-Speicherpuffer-Objekte
  • Arrays von Arrays
  • Atomic-Counter
  • Images
  • Separate Programm-Objekte (auch bekannt als separate Shader-Objekte)
  • Explizite Uniform-Locations
  • Texture-Gather
  • Bitfield-Operationen
  • Integer-Mix-Funktionen
Aktuelle Version: 3.20 6. August 2015
  • OpenGL ES 3.2
  • Geometry-Shader
  • Tessellation-Control-Shader
  • Tessellation-Evaluation-Shader