Limbajul de umbrire OpenGL

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 14 mai 2018; verificările necesită 19 modificări .
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) .

Istorie

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

GLSL 1.50

S-a adăugat suport pentru geometry shader, pentru care au fost folosite anterior extensiile GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4.

Un exemplu de un simplu Vertex Shader în GLSL

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 exemplu de Geometry Shader simplu în GLSL

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

Un exemplu de shader de fragmente GLSL simplu

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

IDE

Vezi și

Literatură

  • Boreskov Alexey . Dezvoltare și depanare shader. - BHV-Petersburg, 2006. - 488 p. - ISBN 5-94157-712-5 .
  • Boreskov Alexey . Extensii OpenGL. - BHV-Petersburg, 2005. - 688 p. — ISBN 5-94157-614-5 .

Note

  1. OpenGL 3.3 și 4.0 oferă o nouă viață hardware-ului grafic existent și pregătesc calea pentru GPU-uri de generație următoare (downlink) . Nick Haemel (11 martie 2010). Preluat la 13 martie 2010. Arhivat din original la 10 aprilie 2012. 
  2. GLSL Language Specification, Versiunea 1.10.59 . Preluat la 28 septembrie 2018. Arhivat din original la 28 septembrie 2018.
  3. GLSL Language Specification, Versiunea 1.20.8 . Consultat la 28 septembrie 2018. Arhivat din original la 5 aprilie 2019.
  4. GLSL Language Specification, Versiunea 1.30.10 . Preluat la 28 septembrie 2018. Arhivat din original la 19 ianuarie 2019.
  5. GLSL Language Specification, Versiunea 1.40.8 . Preluat la 28 septembrie 2018. Arhivat din original la 11 august 2017.
  6. GLSL Language Specification, Versiunea 1.50.11 . Preluat la 28 septembrie 2018. Arhivat din original la 29 aprilie 2016.
  7. GLSL Language Specification, Versiunea 3.30.6 . Preluat la 28 septembrie 2018. Arhivat din original la 11 august 2017.
  8. GLSL Language Specification, Versiunea 4.00.9 . Preluat la 28 septembrie 2018. Arhivat din original la 12 august 2017.
  9. GLSL Language Specification, Versiunea 4.10.6 . Preluat la 28 septembrie 2018. Arhivat din original la 19 ianuarie 2019.
  10. GLSL Language Specification, Versiunea 4.20.11 . Preluat la 28 septembrie 2018. Arhivat din original la 19 ianuarie 2019.
  11. GLSL Language Specification, Versiunea 4.30.8 . Preluat la 28 septembrie 2018. Arhivat din original la 28 septembrie 2018.
  12. GLSL Language Specification, Versiunea 4.40.9 . Preluat la 28 septembrie 2018. Arhivat din original la 28 septembrie 2018.
  13. GLSL Language Specification, Versiunea 4.50.7 . Preluat la 28 septembrie 2018. Arhivat din original la 19 iulie 2019.
  14. GLSL Language Specification, Versiunea 4.60.5 . Preluat la 28 septembrie 2018. Arhivat din original la 12 august 2018.
  15. GLSL ES Language Specification, Versiunea 1.00, revizuirea 17 . Consultat la 19 iunie 2018. Arhivat din original la 13 iulie 2018.
  16. GLSL ES Language Specification, Versiunea 3.00, revizuirea 6 . Preluat la 19 iunie 2018. Arhivat din original la 4 martie 2018.

Link -uri

Articole

Specificații