OpenGL Shading Language | |
---|---|
Sorts | shader programmeringsspråk [d] ochprogrammeringsspråk |
Utvecklaren | Khronos Group |
Operativ system | Programvara för flera plattformar |
Första upplagan | 2004 |
senaste versionen | 11.12.0 ( oktober 2022 ) |
Hemsida | opengl.org |
GLSL (OpenGL Shading Language, Graphics Library Shader Language) är ett högnivåspråk för shader - programmering . Designad för att utföra den matematik som normalt krävs för att utföra grafisk rastrering . Språkets syntax är baserad på programmeringsspråket ANSI C , men på grund av dess specifika fokus har många funktioner uteslutits från det för att förenkla språket och förbättra prestandan. Språket innehåller ytterligare funktioner och datatyper, till exempel för att arbeta med vektorer och matriser .
Den största fördelen med GLSL jämfört med andra shader-språk är kodportabilitet över plattformar och operativsystem .
GLSL används i OpenGL , OpenGL ES och WebGL använder GLSL ES (OpenGL ES Shading Language) .
Inledningsvis blev GLSL 1.10 tillgänglig som en uppsättning tillägg GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_vertex_shader, GL_ARB_fragment_shader. Men sedan OpenGL 2.0 har GLSL inkluderats i kärnan.
Från och med OpenGL 3.3 ändrar GLSL sin versionsnumrering. GLSL-versionsnumret kommer nu att matcha OpenGL-versionen [1] .
GLSL version | OpenGL version | datumet |
---|---|---|
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 mars 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 februari 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 | Baserat på GLSL-version | datumet |
---|---|---|---|---|
1.00.17 [15] | 2.0 | 1.0 | 1.20 | 12 maj 2009 |
3.00.6 [16] | 3.0 | 2.0 | 3.30 | 29 januari 2016 |
Lade till stöd för geometriskuggningar, för vilka tilläggen GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4 tidigare användes.
Transformera ingångspunkten på samma sätt som standardpipelinen gör.
void huvudsaklig ( void ) { gl_Position = ftransform (); }Obs: ftransform() stöds inte längre av GLSL sedan version 1.40 och GLSL ES sedan version 1.0. Nu måste programmerare hantera projektions- och transformationsmatriserna för modellen i enlighet med OpenGL 3.1-standarden.
#version 140 enhetlig transformation { mat4 projektionsmatris ; mat4 modelview_matrix ; }; i vec3 vertex ; void main () { gl_Position = projection_matrix * modelview_matrix * vec4 ( vertex , 1.0 ); }En enkel shader som fungerar med färg och position.
#version 120 #extension GL_EXT_geometry_shader4 : aktivera 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 lades geometriskuggningar till "kärnfunktionalitet" vilket innebär att inga tillägg behöver användas nu. Syntaxen är dock ganska komplicerad.
En enkel shader som skickar trianglarnas vertexpositioner till nästa steg.:
#version 150 layout ( trianglar ) i ; //indatatyp - trianglar layout ( triangle_strip , max_vertices = 3 ) ut ; //utdatatyp - en kedja av trianglar, högst 3 hörn (dvs en triangel) void main () { for ( int i = 0 ; i < gl_in . längd (); i ++ ) { gl_Position = gl_in [ i ]. gl_Position ; emitVertex (); //en utgångspunkt har skapats som innehåller en kopia av alla aktiva utgångar, i det här fallet bara gl_Position } EndPrimitive (); }Skapar en röd färg texel .
#version 120 void main ( void ) { gl_FragColor = vec4 ( 1.0 , 0.0 , 0.0 , 1.0 ); }I GLSL 1.30 och senare används följande funktion:
glBindFragDataLocation ( Program , 0 , "MyFragColor" );där: Program - en pekare till programmet; 0 - färgbuffertnummer, om du inte använder MRT (Multiple Render Targets), bör värdet vara 0; "MyFragColor" är namnet på utdatavariabeln för skuggningsprogrammet som skriver till denna buffert.
#version 150 void main ( void ) { MyFragColor = vec4 ( 1.0 , 0.0 , 0.0 , 1.0 ); }Artiklar
Specifikationer