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) .
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 |
Tilføjet understøttelse af geometriskyggere, som GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4-udvidelserne tidligere blev brugt til.
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 ); }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 (); }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 ); }Artikler
specifikationer