Limbajul de umbrire OpenGL | |
---|---|
Tip de | limbajul de programare shader [d] șilimbajul de programare |
Dezvoltator | Grupul Khronos |
Sistem de operare | Software multiplatformă |
Prima editie | 2004 |
ultima versiune | 11.12.0 ( octombrie 2022 ) |
Site-ul web | opengl.org |
GLSL (OpenGL Shading Language, Graphics Library Shader Language) este un limbaj de nivel înalt pentru programarea shader . Conceput pentru a efectua calculele necesare în mod normal pentru a realiza rasterizarea graficelor . Sintaxa limbajului se bazează pe limbajul de programare ANSI C , cu toate acestea, datorită focalizării sale specifice, multe caracteristici au fost excluse din acesta pentru a simplifica limbajul și a îmbunătăți performanța. Limbajul include funcții și tipuri de date suplimentare, cum ar fi cele pentru lucrul cu vectori și matrice .
Principalul avantaj al GLSL față de alte limbaje shader este portabilitatea codului pe platforme și sisteme de operare .
GLSL este folosit în OpenGL , OpenGL ES și WebGL utilizează GLSL ES (OpenGL ES Shading Language) .
Inițial, GLSL 1.10 a devenit disponibil ca un set de extensii GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_vertex_shader , GL_ARB_fragment_shader. Dar de la OpenGL 2.0, GLSL a fost inclus în nucleu.
Începând cu OpenGL 3.3, GLSL își schimbă numerotarea versiunii. Numărul versiunii GLSL se va potrivi acum cu versiunea OpenGL [1] .
Versiunea GLSL | Versiunea OpenGL | data |
---|---|---|
1.10.59 [2] | 2.0 | 30 aprilie 2004 |
1.20.8 [3] | 2.1 | 7 septembrie 2006 |
1.30.10 [4] | 3.0 | 22 noiembrie 2009 |
1.40.08 [5] | 3.1 | 22 noiembrie 2009 |
1.50.11 [6] | 3.2 | 4 decembrie 2009 |
3.30.6 [7] | 3.3 | 11 martie 2010 |
4.00.9 [8] | 4.0 | 24 iulie 2010 |
4.10.6 [9] | 4.1 | 24 iulie 2010 |
4.20.11 [10] | 4.2 | 12 decembrie 2011 |
4.30.8 [11] | 4.3 | 7 februarie 2013 |
4.40.9 [12] | 4.4 | 16 iunie 2014 |
4.50.7 [13] | 4.5 | 9 mai 2017 |
4.60.5 [14] | 4.6 | 14 iunie 2018 |
Versiunea GLSLES | Versiunea OpenGL ES | versiunea webgl | Bazat pe versiunea GLSL | data |
---|---|---|---|---|
1.00.17 [15] | 2.0 | 1.0 | 1.20 | 12 mai 2009 |
3.00.6 [16] | 3.0 | 2.0 | 3.30 | 29 ianuarie 2016 |
S-a adăugat suport pentru geometry shader, pentru care au fost folosite anterior extensiile GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4.
Transformați vârful de intrare în același mod ca și conducta standard.
void principal ( gol ) { gl_Position = ftransform (); }Notă: ftransform() nu mai este acceptat de GLSL din versiunea 1.40 și GLSL ES din versiunea 1.0. Acum programatorii trebuie să gestioneze matricele de proiecție și transformare ale modelului în conformitate cu standardul OpenGL 3.1.
#versiunea 140 transformare uniformă { mat4 projection_matrix ; mat4 modelview_matrix ; }; in vec3 vertex ; void main () { gl_Position = projection_matrix * modelview_matrix * vec4 ( vertex , 1.0 ); }Un shader simplu care funcționează cu culoarea și poziția.
#versiunea 120 #extensia GL_EXT_geometry_shader4 : activați void main () { pentru ( int i = 0 ; i < gl_VerticesIn ; ++ i ) { gl_FrontColor = gl_FrontColorIn [ i ]; gl_Position = gl_PositionIn [ i ]; emitVertex (); } }În OpenGL 3.2 cu GLSL 1.50, shaderele de geometrie au fost adăugate la „funcționalitatea de bază”, ceea ce înseamnă că nu trebuie utilizate extensii acum. Cu toate acestea, sintaxa este destul de complicată.
Un shader simplu care trece pozițiile vârfurilor triunghiurilor la etapa următoare.:
#versiunea 150 layout ( triunghiuri ) in ; //tip de date de intrare - aspectul triunghiurilor ( triangle_strip , max_vertices = 3 ) out ; //tip de date de ieșire - un lanț de triunghiuri, nu mai mult de 3 vârfuri (adică un triunghi) void main () { pentru ( int i = 0 ; i < gl_in . lungime (); i ++ ) { gl_Position = gl_in [ i ]. gl_Posiție ; emitVertex (); //a fost creat un vârf de ieșire care conține o copie a tuturor ieșirilor active, în acest caz doar gl_Position } EndPrimitive (); }Creează un texel de culoare roșie .
#version 120 void main ( void ) { gl_FragColor = vec4 ( 1,0 , 0,0 , 0,0 , 1,0 ); }În GLSL 1.30 și versiunile ulterioare, este utilizată următoarea funcție:
glBindFragDataLocation ( Program , 0 , "MyFragColor" );unde: Program - un pointer către program; 0 - numărul bufferului de culoare, dacă nu utilizați MRT (Multiple Render Targets), valoarea ar trebui să fie 0; „MyFragColor” este numele variabilei de ieșire a programului shader care scrie în acest buffer.
#version 150 void main ( void ) { MyFragColor = vec4 ( 1.0 , 0.0 , 0.0 , 1.0 ); }Articole
Specificații