OpenGL Shading Language

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 14. maj 2018; checks kræver 19 redigeringer .
OpenGL Shading Language
Type shader programmeringssprog [d] ogprogrammeringssprog
Udvikler Khronos Group
Operativ system Cross-platform software
Første udgave 2004
nyeste version 11.12.0 ( oktober 2022 )
Internet side opengl.org

GLSL (OpenGL Shading Language, Graphics Library Shader Language) er et sprog på højt niveau til shader - programmering . Designet til at udføre den matematik, der normalt kræves for at udføre grafisk rasterisering . Sprogets syntaks er baseret på programmeringssproget ANSI C , men på grund af dets specifikke fokus er mange funktioner blevet udelukket fra det for at forenkle sproget og forbedre ydeevnen. Sproget indeholder yderligere funktioner og datatyper, såsom dem til at arbejde med vektorer og matricer .

Den største fordel ved GLSL i forhold til andre shader-sprog  er kodeportabilitet på tværs af platforme og operativsystemer .

GLSL bruges i OpenGL , OpenGL ES og WebGL bruger GLSL ES (OpenGL ES Shading Language) .

Historie

Oprindeligt blev GLSL 1.10 tilgængelig som et sæt udvidelser GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_vertex_shader, GL_ARB_fragment_shader. Men siden OpenGL 2.0 er GLSL blevet inkluderet i kernen.

Fra og med OpenGL 3.3 ændrer GLSL sin versionsnummerering. GLSL-versionsnummeret vil nu matche OpenGL-versionen [1] .

GLSL version OpenGL version datoen
1.10.59 [2] 2.0 30. april 2004
1.20.8 [3] 2.1 7. september 2006
1.30.10 [4] 3.0 22. november 2009
1.40.08 [5] 3.1 22. november 2009
1.50.11 [6] 3.2 4. december 2009
3.30.6 [7] 3.3 11 marts 2010
4.00.9 [8] 4.0 24. juli 2010
4.10.6 [9] 4.1 24. juli 2010
4.20.11 [10] 4.2 12. december 2011
4.30.8 [11] 4.3 7. februar 2013
4.40.9 [12] 4.4 16. juni 2014
4.50.7 [13] 4.5 9. maj 2017
4.60.5 [14] 4.6 14. juni 2018
GLSLES version OpenGL ES version webgl version Baseret på GLSL version datoen
1.00.17 [15] 2.0 1.0 1,20 12 maj 2009
3.00.6 [16] 3.0 2.0 3.30 29. januar 2016

GLSL 1.50

Tilføjet understøttelse af geometriskyggere, som GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4-udvidelserne tidligere blev brugt til.

Et eksempel på en simpel Vertex Shader i GLSL

Transformer input-toppunktet på samme måde som standardpipelinen gør.

ugyldig hoved ( ugyldig ) { gl_Position = ftransform (); }

Bemærk: ftransform() understøttes ikke længere af GLSL siden version 1.40 og GLSL ES siden version 1.0. Nu skal programmører styre modellens projektions- og transformationsmatricer i overensstemmelse med OpenGL 3.1-standarden.

#version 140 ensartet transformation { mat4 projektionsmatrix ; mat4 modelview_matrix ; }; i vec3 vertex ; void main () { gl_Position = projektion_matrix * modelview_matrix * vec4 ( vertex , 1.0 ); }

Et eksempel på en simpel Geometry Shader i GLSL

En simpel shader, der arbejder med farve og position.

#version 120 #udvidelse GL_EXT_geometry_shader4 : aktiver void main () { for ( int i = 0 ; i < gl_VerticesIn ; ++ i ) { gl_FrontColor = gl_FrontColorIn [ i ]; gl_Position = gl_PositionIn [ i ]; emitVertex (); } }

I OpenGL 3.2 med GLSL 1.50 blev geometriskygger tilføjet til "kernefunktionalitet", hvilket betyder, at ingen udvidelser skal bruges nu. Syntaksen er dog ret kompliceret.

En simpel skygge, der sender trekanternes toppositioner til næste trin.:

#version 150 layout ( trekanter ) i ; //input datatype - trekanter layout ( triangle_strip , max_vertices = 3 ) ud ; //outputdatatype - en kæde af trekanter, ikke mere end 3 hjørner (dvs. en trekant) void main () { for ( int i = 0 ; i < gl_in . længde (); i ++ ) { gl_Position = gl_in [ i ]. gl_Position ; emitVertex (); //et udgangspunkt er blevet oprettet indeholdende en kopi af alle aktive output, i dette tilfælde kun gl_Position } EndPrimitive (); }

Et eksempel på en simpel GLSL Fragment Shader

Opretter en rød farve texel .

#version 120 void main ( ugyldig ) { gl_FragColor = vec4 ( 1.0 , 0.0 , 0.0 , 1.0 ); }

I GLSL 1.30 og nyere bruges følgende funktion:

glBindFragDataLocation ( Program , 0 , "MyFragColor" );

hvor: Program - en pegepind til programmet; 0 - farvebuffernummer, hvis du ikke bruger MRT (Multiple Render Targets), skal værdien være 0; "MyFragColor" er navnet på outputvariablen for shader-programmet, der skriver til denne buffer.

#version 150 void main ( ugyldig ) { MyFragColor = vec4 ( 1.0 , 0.0 , 0.0 , 1.0 ); }

IDE

Se også

Litteratur

  • Boreskov Alexey . Shader udvikling og debugging. - BHV-Petersburg, 2006. - 488 s. - ISBN 5-94157-712-5 .
  • Boreskov Alexey . OpenGL udvidelser. - BHV-Petersburg, 2005. - 688 s. — ISBN 5-94157-614-5 .

Noter

  1. OpenGL 3.3 & 4.0 puster nyt liv i eksisterende grafikhardware og baner vejen for næste generations GPU'er (downlink) . Nick Haemel (11. marts 2010). Hentet 13. marts 2010. Arkiveret fra originalen 10. april 2012. 
  2. GLSL-sprogspecifikation, version 1.10.59 . Hentet 28. september 2018. Arkiveret fra originalen 28. september 2018.
  3. GLSL-sprogspecifikation, version 1.20.8 . Hentet 28. september 2018. Arkiveret fra originalen 5. april 2019.
  4. GLSL-sprogspecifikation, version 1.30.10 . Hentet 28. september 2018. Arkiveret fra originalen 19. januar 2019.
  5. GLSL-sprogspecifikation, version 1.40.8 . Hentet 28. september 2018. Arkiveret fra originalen 11. august 2017.
  6. GLSL-sprogspecifikation, version 1.50.11 . Hentet 28. september 2018. Arkiveret fra originalen 29. april 2016.
  7. GLSL-sprogspecifikation, version 3.30.6 . Hentet 28. september 2018. Arkiveret fra originalen 11. august 2017.
  8. GLSL-sprogspecifikation, version 4.00.9 . Hentet 28. september 2018. Arkiveret fra originalen 12. august 2017.
  9. GLSL-sprogspecifikation, version 4.10.6 . Hentet 28. september 2018. Arkiveret fra originalen 19. januar 2019.
  10. GLSL-sprogspecifikation, version 4.20.11 . Hentet 28. september 2018. Arkiveret fra originalen 19. januar 2019.
  11. GLSL-sprogspecifikation, version 4.30.8 . Hentet 28. september 2018. Arkiveret fra originalen 28. september 2018.
  12. GLSL-sprogspecifikation, version 4.40.9 . Hentet 28. september 2018. Arkiveret fra originalen 28. september 2018.
  13. GLSL-sprogspecifikation, version 4.50.7 . Hentet 28. september 2018. Arkiveret fra originalen 19. juli 2019.
  14. GLSL-sprogspecifikation, version 4.60.5 . Hentet 28. september 2018. Arkiveret fra originalen 12. august 2018.
  15. GLSL ES sprogspecifikation, version 1.00, revision 17 . Hentet 19. juni 2018. Arkiveret fra originalen 13. juli 2018.
  16. GLSL ES sprogspecifikation, version 3.00, revision 6 . Hentet 19. juni 2018. Arkiveret fra originalen 4. marts 2018.

Links

Artikler

specifikationer