Stínovací jazyk OpenGL | |
---|---|
Typ | shader programovací jazyk [d] aprogramovací jazyk |
Vývojář | Skupina Khronos |
Operační systém | Multiplatformní software |
První vydání | 2004 |
Nejnovější verze | 11.12.0 ( říjen 2022 ) |
webová stránka | opengl.org |
GLSL (OpenGL Shading Language, Graphics Library Shader Language) je vysokoúrovňový jazyk pro programování shaderů . Navrženo k provádění matematiky, která je běžně vyžadována k provádění rasterizace grafiky . Syntaxe jazyka vychází z programovacího jazyka ANSI C , avšak vzhledem k jeho specifickému zaměření z něj bylo vyřazeno mnoho funkcí, aby se jazyk zjednodušil a zlepšil výkon. Jazyk obsahuje další funkce a datové typy, jako jsou ty pro práci s vektory a maticemi .
Hlavní výhodou GLSL oproti jiným shader jazykům je přenositelnost kódu napříč platformami a operačními systémy .
GLSL se používá v OpenGL , OpenGL ES a WebGL používají GLSL ES (OpenGL ES Shading Language) .
Zpočátku byla GLSL 1.10 dostupná jako sada rozšíření GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_vertex_shader, GL_ARB_fragment_shader. Ale od OpenGL 2.0 je GLSL součástí jádra.
Počínaje OpenGL 3.3 mění GLSL své číslování verzí. Číslo verze GLSL bude nyní odpovídat verzi OpenGL [1] .
GLSL verze | Verze OpenGL | datum |
---|---|---|
1.10.59 [2] | 2,0 | 30. dubna 2004 |
1.20.8 [3] | 2.1 | 7. září 2006 |
1.30.10 [4] | 3.0 | 22. listopadu 2009 |
1.40.08 [5] | 3.1 | 22. listopadu 2009 |
1.50.11 [6] | 3.2 | 4. prosince 2009 |
30.6. [7] | 3.3 | 11. března 2010 |
4.00.9 [8] | 4,0 | 24. července 2010 |
4.10.6 [9] | 4.1 | 24. července 2010 |
20.4.11 [10] | 4.2 | 12. prosince 2011 |
4.30.8 [11] | 4.3 | 7. února 2013 |
4.40.9 [12] | 4.4 | 16. června 2014 |
4.50.7 [13] | 4.5 | 9. května 2017 |
4.60.5 [14] | 4.6 | 14. června 2018 |
Verze GLSLES | Verze OpenGL ES | verze webgl | Založeno na verzi GLSL | datum |
---|---|---|---|---|
1.00.17 [15] | 2,0 | 1,0 | 1.20 | 12. května 2009 |
3.00.6 [16] | 3.0 | 2,0 | 3.30 | 29. ledna 2016 |
Přidána podpora pro geometry shadery, pro které byla dříve používána rozšíření GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4.
Transformujte vstupní vrchol stejným způsobem jako standardní potrubí.
void hlavní ( void ) { gl_Position = ftransform (); }Poznámka: ftransform() již není podporována GLSL od verze 1.40 a GLSL ES od verze 1.0. Nyní musí programátoři spravovat projekční a transformační matice modelu v souladu se standardem OpenGL 3.1.
#verze 140 jednotná transformace { mat4 projekční_matice ; mat4 modelview_matrix ; }; ve vrcholu vec3 ; void main () { gl_Position = projection_matrix * modelview_matrix * vec4 ( vertex , 1.0 ); }Jednoduchý shader, který pracuje s barvou a pozicí.
#verze 120 #extension GL_EXT_geometry_shader4 : povolit void main () { for ( int i = 0 ; i < gl_VerticesIn ; ++ i ) { gl_FrontColor = gl_FrontColorIn [ i ]; gl_Position = gl_PositionIn [ i ]; emitVertex (); } }V OpenGL 3.2 s GLSL 1.50 byly k "základní funkčnosti" přidány geometry shadery, což znamená, že nyní není třeba používat žádná rozšíření. Syntaxe je však poměrně komplikovaná.
Jednoduchý shader, který předá vrcholové pozice trojúhelníků do další fáze.:
#verze 150 rozložení ( trojúhelníky ) v ; //vstupní datový typ - rozvržení trojúhelníků ( triangl_strip , max_vertices = 3 ) out ; //výstupní datový typ - řetězec trojúhelníků, ne více než 3 vrcholy (tj. jeden trojúhelník) void main () { for ( int i = 0 ; i < gl_in . length (); i ++ ) { gl_Position = gl_in [ i ]. gl_Position ; emitVertex (); // byl vytvořen výstupní vertex obsahující kopii všech aktivních výstupů, v tomto případě pouze gl_Position } EndPrimitive (); }Vytváří červenou barvu texelu .
#version 120 void main ( void ) { gl_FragColor = vec4 ( 1,0 , 0,0 , 0,0 , 1,0 ); }V GLSL 1.30 a novějších se používá následující funkce:
glBindFragDataLocation ( Program , 0 , "MyFragColor" );kde: Program - ukazatel na program; 0 - číslo barevného bufferu, pokud nepoužíváte MRT (Multiple Render Targets), hodnota by měla být 0; "MyFragColor" je název výstupní proměnné programu shaderu, který zapisuje do této vyrovnávací paměti.
#version 150 void main ( void ) { MyFragColor = vec4 ( 1,0 , 0,0 , 0,0 , 1,0 ); }články
Specifikace