Stínovací jazyk OpenGL

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 14. května 2018; kontroly vyžadují 19 úprav .
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) .

Historie

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

GLSL 1,50

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.

Příklad jednoduchého Vertex Shaderu v GLSL

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

Příklad jednoduchého Geometry Shader v GLSL

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

Příklad jednoduchého GLSL Fragment Shaderu

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

IDE

Viz také

Literatura

  • Boreskov Alexey . Vývoj a ladění shaderů. - BHV-Petersburg, 2006. - 488 s. - ISBN 5-94157-712-5 .
  • Boreskov Alexey . rozšíření OpenGL. - BHV-Petersburg, 2005. - 688 s. — ISBN 5-94157-614-5 .

Poznámky

  1. OpenGL 3.3 a 4.0 vdechnou nový život stávajícímu grafickému hardwaru a připraví cestu pro GPU nové generace (downlink) . Nick Haemel (11. března 2010). Získáno 13. března 2010. Archivováno z originálu 10. dubna 2012. 
  2. Specifikace jazyka GLSL, verze 1.10.59 . Získáno 28. září 2018. Archivováno z originálu 28. září 2018.
  3. Specifikace jazyka GLSL, verze 1.20.8 . Získáno 28. září 2018. Archivováno z originálu 5. dubna 2019.
  4. Specifikace jazyka GLSL, verze 1.30.10 . Získáno 28. září 2018. Archivováno z originálu 19. ledna 2019.
  5. Specifikace jazyka GLSL, verze 1.40.8 . Získáno 28. září 2018. Archivováno z originálu 11. srpna 2017.
  6. Specifikace jazyka GLSL, verze 1.50.11 . Získáno 28. září 2018. Archivováno z originálu 29. dubna 2016.
  7. Specifikace jazyka GLSL, verze 3.30.6 . Získáno 28. září 2018. Archivováno z originálu 11. srpna 2017.
  8. Specifikace jazyka GLSL, verze 4.00.9 . Získáno 28. září 2018. Archivováno z originálu 12. srpna 2017.
  9. Specifikace jazyka GLSL, verze 4.10.6 . Získáno 28. září 2018. Archivováno z originálu 19. ledna 2019.
  10. Specifikace jazyka GLSL, verze 4.20.11 . Získáno 28. září 2018. Archivováno z originálu 19. ledna 2019.
  11. Specifikace jazyka GLSL, verze 4.30.8 . Získáno 28. září 2018. Archivováno z originálu 28. září 2018.
  12. Specifikace jazyka GLSL, verze 4.40.9 . Získáno 28. září 2018. Archivováno z originálu 28. září 2018.
  13. Specifikace jazyka GLSL, verze 4.50.7 . Získáno 28. září 2018. Archivováno z originálu 19. července 2019.
  14. Specifikace jazyka GLSL, verze 4.60.5 . Získáno 28. 9. 2018. Archivováno z originálu 12. 8. 2018.
  15. Specifikace jazyka GLSL ES, verze 1.00, revize 17 . Získáno 19. června 2018. Archivováno z originálu 13. července 2018.
  16. Specifikace jazyka GLSL ES, verze 3.00, revize 6 . Získáno 19. června 2018. Archivováno z originálu 4. března 2018.

Odkazy

články

Specifikace