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 .
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 |
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.
A bemeneti csúcsot ugyanúgy alakítsa át, mint a szabványos folyamat.
érvénytelen fő ( é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 ); }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 (); }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 ); }Cikkek
Műszaki adatok