„OpenGL ES Shading Language“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
tk k |
|||
Zeile 7: | Zeile 7: | ||
|AktuelleVersionFreigabeDatum = 17. März 2014 |
|AktuelleVersionFreigabeDatum = 17. März 2014 |
||
|Website = [http://www.khronos.org/opengles/ www.khronos.org/opengles/] |
|Website = [http://www.khronos.org/opengles/ www.khronos.org/opengles/] |
||
|Beeinflusst_von = [[ |
|Beeinflusst_von = [[OpenGL Shading Language]] und [[C (Programmiersprache)|C]] |
||
}} |
}} |
||
Zeile 13: | Zeile 13: | ||
== Sprachmerkmale == |
== Sprachmerkmale == |
||
GLSL ES basiert auf der [[ |
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 nur drei Shadertypen, einen [[Vertex-Shader]], einen [[Fragment-Shader]] und einen [[Compute-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. |
||
== Beispiel == |
== Beispiel == |
||
Zeile 21: | Zeile 21: | ||
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. |
||
< |
<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> |
|||
Dasselbe Beispiel in Version 3.00: |
Dasselbe Beispiel in Version 3.00: |
||
< |
<syntaxhighlight lang="glsl"> |
||
#version 300 es |
#version 300 es |
||
uniform mat4 modelViewProjectionMatrix; |
uniform mat4 modelViewProjectionMatrix; |
||
Zeile 43: | Zeile 43: | ||
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 vom Vertex-Shader übergebene Farbe. |
Dieser Fragment-Shader setzt die Zeichenfarbe des Fragments auf die vom Vertex-Shader übergebene Farbe. |
||
< |
<syntaxhighlight lang="glsl"> |
||
precision mediump float; |
precision mediump float; |
||
varying vec4 v_color; |
varying vec4 v_color; |
||
Zeile 61: | Zeile 61: | ||
gl_FragColor = v_color; |
gl_FragColor = v_color; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
Dasselbe Beispiel in Version 3.00 |
Dasselbe Beispiel in Version 3.00 |
||
< |
<syntaxhighlight lang="glsl"> |
||
#version 300 es |
#version 300 es |
||
precision mediump float; |
precision mediump float; |
||
Zeile 75: | Zeile 75: | ||
my_fragcolor = v_color; |
my_fragcolor = v_color; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
== Versionsgeschichte == |
== Versionsgeschichte == |
||
Zeile 84: | Zeile 84: | ||
|- class="hintergrundfarbe5" |
|- class="hintergrundfarbe5" |
||
! Version |
! Version |
||
! |
!style="min-width:10em;"| Veröffentlichung |
||
! Beschreibung / Änderungen |
! Beschreibung / Änderungen |
||
|- |
|- |
||
| {{Version|o|1.00}} |
| {{Version|o|1.00}} |
||
| 12. Mai 2009 |
| 12. Mai 2009 |
||
| |
| |
||
* OpenGL ES 2.0 |
* OpenGL ES 2.0 |
||
* erste Veröffentlichung |
* erste Veröffentlichung |
||
Zeile 128: | Zeile 128: | ||
== 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).] ( |
* [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/3.0/GLSL_ES_Specification_3.00.4.pdf The OpenGL ES® Shading Language Version 3.00 (6. März 2013).] ( |
* [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.1/GLSL_ES_Specification_3.10.pdf The OpenGL ES® Shading Language Version 3.10 (17. März 2014).] ( |
* [http://www.khronos.org/registry/gles/specs/3.1/GLSL_ES_Specification_3.10.pdf The OpenGL ES® Shading Language Version 3.10 (17. März 2014).] (PDF; 891 kB) |
||
{{SORTIERUNG:Opengl Es Shading Language}} |
{{SORTIERUNG:Opengl Es Shading Language}} |
Version vom 20. Mai 2015, 20:24 Uhr
OpenGL ES Shading Language | |
---|---|
Basisdaten | |
Erscheinungsjahr: | 2009 |
Entwickler: | Khronos Group |
Aktuelle Version: | 3.10 (17. März 2014) |
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.
Sprachmerkmale
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 nur drei Shadertypen, einen Vertex-Shader, einen Fragment-Shader und einen Compute-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.
Beispiel
Ein Beispiel eines GLSL-ES-Programms aus einem Vertex- und einem Fragment-Shader; das Programm zeichnet Objekte in einer zuvor definierten Farbe:
Vertex-Shader
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
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
Legende: | Alte Version | Aktuelle Version |
---|
Version | Veröffentlichung | Beschreibung / Änderungen |
---|---|---|
1.00 | 12. Mai 2009 |
|
3.00 | 11. Juli 2012 |
|
3.10 | 17. März 2014 |
|