OpenGL árnyékoló nyelv

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2018. május 14-én felülvizsgált verziótól ; az ellenőrzések 19 szerkesztést igényelnek .
OpenGL árnyékoló nyelv
Típusú shader programozási nyelv [d] ésprogramozási nyelv
Fejlesztő Khronos csoport
Operációs rendszer Többplatformos szoftver
Első kiadás 2004
legújabb verzió 11.12.0 ( 2022. október )
Weboldal opengl.org

A GLSL (OpenGL Shading Language, Graphics Library Shader Language) egy magas szintű nyelv a shader programozáshoz . A grafikai raszterizáláshoz általában szükséges matematikai műveletek elvégzésére tervezték . A nyelv szintaxisa az ANSI C programozási nyelven alapul , azonban speciális fókusza miatt számos funkciót kizártak belőle a nyelv egyszerűsítése és a teljesítmény javítása érdekében. A nyelv további függvényeket és adattípusokat tartalmaz, például a vektorokkal és mátrixokkal való munkavégzéshez szükségeseket .

A GLSL fő előnye a többi shader nyelvhez  képest a kód hordozhatósága a platformok és operációs rendszerek között .

A GLSL az OpenGL -ben, az OpenGL ES és a WebGL a GLSL ES -t (OpenGL ES árnyékoló nyelv) használja .

Történelem

Kezdetben a GLSL 1.10 a GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_vertex_shader, GL_ARB_fragment_shader kiterjesztések készleteként vált elérhetővé. De az OpenGL 2.0 óta a GLSL benne van a magban.

Az OpenGL 3.3-tól kezdve a GLSL megváltoztatja a verziószámozását. A GLSL verziószáma mostantól megegyezik az OpenGL verzióval [1] .

GLSL verzió OpenGL verzió dátum
1.10.59 [2] 2.0 2004. április 30
1.20.8 [3] 2.1 2006. szeptember 7
1.30.10 [4] 3.0 2009. november 22
1.40.08 [5] 3.1 2009. november 22
1.50.11 [6] 3.2 2009. december 4
3.30.6 [7] 3.3 2010. március 11
4.00.9 [8] 4.0 2010. július 24
4.10.6 [9] 4.1 2010. július 24
4.20.11 [10] 4.2 2011. december 12
4.30.8 [11] 4.3 2013. február 7
4.40.9 [12] 4.4 2014. június 16
4.50.7 [13] 4.5 2017. május 9
4.60.5 [14] 4.6 2018. június 14
GLSLES verzió OpenGL ES verzió webgl verzió GLSL verzió alapján dátum
1.00.17 [15] 2.0 1.0 1.20 2009. május 12
3.00.6 [16] 3.0 2.0 3.30 2016. január 29

GLSL 1.50

Támogatás hozzáadva a geometriai árnyékolókhoz, amelyekhez korábban a GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4 bővítményeket használták.

Példa egy egyszerű Vertex Shaderre GLSL-ben

A bemeneti csúcsot ugyanúgy alakítsa át, mint a szabványos folyamat.

érvénytelen ( érvénytelen ) { gl_Position = ftranszformáció (); }

Megjegyzés: Az ftransform() függvényt már nem támogatja a GLSL az 1.40-es verzió óta, és a GLSL ES-t az 1.0-s verzió óta. Most a programozóknak kell kezelniük a modell vetületi és transzformációs mátrixait az OpenGL 3.1 szabványnak megfelelően.

#140-es verzió egységes átalakulás { mat4 vetületi_mátrix ; mat4 modellnézet_mátrix ; }; vec3 csúcsban ; _ void main () { gl_Position = vetületi_mátrix * modellnézet_mátrix * vec4 ( vertex , 1.0 ); }

Példa egy egyszerű Geometry Shaderre GLSL-ben

Egy egyszerű shader, amely színekkel és pozíciókkal működik.

#120 -as verzió #extension GL_EXT_geometry_shader4 : engedélyezés void main () { for ( int i = 0 ; i < gl_VerticesIn ; ++ i ) { gl_FrontColor = gl_FrontColorIn [ i ]; gl_Position = gl_PositionIn [ i ]; emitVertex (); } }

A GLSL 1.50-es OpenGL 3.2-ben a geometria árnyékolóit hozzáadták az "alapfunkciókhoz", ami azt jelenti, hogy most nem kell bővítményeket használni. A szintaxis azonban meglehetősen bonyolult.

Egy egyszerű shader, amely a háromszögek csúcspontjait továbbítja a következő szakaszba.:

#150-es verzió elrendezés ( háromszögek ) in ; //input data type - triangles layout ( triangle_strip , max_vertices = 3 ) out ; //kimeneti adattípus - háromszögekből álló lánc, legfeljebb 3 csúcs (azaz egy háromszög) void main () { for ( int i = 0 ; i < gl_in . hossz (); i ++ ) { gl_Position = gl_in [ i ]. gl_Position ; emitVertex (); //létrejött egy kimeneti csúcs, amely tartalmazza az összes aktív kimenet másolatát, ebben az esetben csak a gl_Position } EndPrimitive (); }

Példa egy egyszerű GLSL Fragment Shaderre

Vörös színű texelt hoz létre .

#version 120 void main ( érvénytelen ) { gl_FragColor = vec4 ( 1,0 , 0,0 , 0,0 , 1,0 ); }

A GLSL 1.30 és újabb verzióiban a következő funkció használatos:

glBindFragDataLocation ( Program , 0 , "MyFragColor" );

ahol: Program - egy mutató a programra; 0 - színpufferszám, ha nem használ MRT-t (Multiple Render Targets), akkor az érték 0 legyen; A "MyFragColor" a Shader program kimeneti változójának neve, amely ebbe a pufferbe ír.

#version 150 void main ( érvénytelen ) { MyFragColor = vec4 ( 1,0 , 0,0 , 0,0 , 1,0 ); }

IDE

Lásd még

Irodalom

  • Boreskov Alekszej . Shader fejlesztés és hibakeresés. - BHV-Pétervár, 2006. - 488 p. - ISBN 5-94157-712-5 .
  • Boreskov Alekszej . OpenGL kiterjesztések. - BHV-Pétervár, 2005. - 688 p. — ISBN 5-94157-614-5 .

Jegyzetek

  1. Az OpenGL 3.3 és 4.0 új életet lehel a meglévő grafikus hardverbe, és előkészíti az utat a következő generációs GPU-k (lefelé irányuló kapcsolat) számára . Nick Haemel (2010. március 11.). Letöltve: 2010. március 13. Az eredetiből archiválva : 2012. április 10.. 
  2. GLSL nyelvi specifikáció, 1.10.59-es verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2018. szeptember 28.
  3. GLSL nyelvi specifikáció, 1.20.8-as verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2019. április 5..
  4. GLSL nyelvi specifikáció, 1.30.10-es verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2019. január 19.
  5. GLSL nyelvi specifikáció, 1.40.8-as verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2017. augusztus 11..
  6. GLSL nyelvi specifikáció, 1.50.11-es verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2016. április 29.
  7. GLSL nyelvi specifikáció, 3.30.6-os verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2017. augusztus 11..
  8. GLSL nyelvi specifikáció, 4.00.9-es verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2017. augusztus 12.
  9. GLSL nyelvi specifikáció, 4.10.6-os verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2019. január 19.
  10. GLSL nyelvi specifikáció, 4.20.11-es verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2019. január 19.
  11. GLSL nyelvi specifikáció, 4.30.8-as verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2018. szeptember 28.
  12. GLSL nyelvi specifikáció, 4.40.9-es verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2018. szeptember 28.
  13. GLSL nyelvi specifikáció, 4.50.7-es verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2019. július 19.
  14. GLSL nyelvi specifikáció, 4.60.5-ös verzió . Letöltve: 2018. szeptember 28. Az eredetiből archiválva : 2018. augusztus 12.
  15. GLSL ES nyelvi specifikáció, 1.00-s verzió, 17-es változat . Letöltve: 2018. június 19. Az eredetiből archiválva : 2018. július 13.
  16. GLSL ES nyelvi specifikáció, 3.00-as verzió, 6-os változat . Letöltve: 2018. június 19. Az eredetiből archiválva : 2018. március 4..

Linkek

Cikkek

Műszaki adatok