OpenGL Shading Language

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 14 maj 2018; kontroller kräver 19 redigeringar .
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) .

Historik

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

GLSL 1.50

Lade till stöd för geometriskuggningar, för vilka tilläggen GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4 tidigare användes.

Ett exempel på en enkel Vertex Shader i GLSL

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

Ett exempel på en enkel Geometry Shader i GLSL

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

Ett exempel på en enkel GLSL Fragment Shader

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

IDE

Se även

Litteratur

  • Boreskov Alexey . Shader utveckling och felsökning. - BHV-Petersburg, 2006. - 488 sid. - ISBN 5-94157-712-5 .
  • Boreskov Alexey . OpenGL-tillägg. - BHV-Petersburg, 2005. - 688 sid. — ISBN 5-94157-614-5 .

Anteckningar

  1. OpenGL 3.3 & 4.0 blåser nytt liv i befintlig grafikhårdvara och banar väg för nästa generations GPU:er (nedlänk) . Nick Haemel (11 mars 2010). Hämtad 13 mars 2010. Arkiverad från originalet 10 april 2012. 
  2. GLSL-språkspecifikation, version 1.10.59 . Hämtad 28 september 2018. Arkiverad från originalet 28 september 2018.
  3. GLSL-språkspecifikation, version 1.20.8 . Hämtad 28 september 2018. Arkiverad från originalet 5 april 2019.
  4. GLSL-språkspecifikation, version 1.30.10 . Hämtad 28 september 2018. Arkiverad från originalet 19 januari 2019.
  5. GLSL-språkspecifikation, version 1.40.8 . Hämtad 28 september 2018. Arkiverad från originalet 11 augusti 2017.
  6. GLSL-språkspecifikation, version 1.50.11 . Hämtad 28 september 2018. Arkiverad från originalet 29 april 2016.
  7. GLSL-språkspecifikation, version 3.30.6 . Hämtad 28 september 2018. Arkiverad från originalet 11 augusti 2017.
  8. GLSL-språkspecifikation, version 4.00.9 . Hämtad 28 september 2018. Arkiverad från originalet 12 augusti 2017.
  9. GLSL-språkspecifikation, version 4.10.6 . Hämtad 28 september 2018. Arkiverad från originalet 19 januari 2019.
  10. GLSL-språkspecifikation, version 4.20.11 . Hämtad 28 september 2018. Arkiverad från originalet 19 januari 2019.
  11. GLSL-språkspecifikation, version 4.30.8 . Hämtad 28 september 2018. Arkiverad från originalet 28 september 2018.
  12. GLSL-språkspecifikation, version 4.40.9 . Hämtad 28 september 2018. Arkiverad från originalet 28 september 2018.
  13. GLSL-språkspecifikation, version 4.50.7 . Hämtad 28 september 2018. Arkiverad från originalet 19 juli 2019.
  14. GLSL-språkspecifikation, version 4.60.5 . Hämtad 28 september 2018. Arkiverad från originalet 12 augusti 2018.
  15. GLSL ES Language Specification, version 1.00, revision 17 . Hämtad 19 juni 2018. Arkiverad från originalet 13 juli 2018.
  16. GLSL ES språkspecifikation, version 3.00, revision 6 . Hämtad 19 juni 2018. Arkiverad från originalet 4 mars 2018.

Länkar

Artiklar

Specifikationer