OpenGL-skuggningsspråk
OpenGL-skuggningsspråk | |
---|---|
Publiceringsår: | 2002 |
Utvecklaren: | Khronos Group |
Aktuell version : | 4.60 (23 juli 2017) |
Påverkad av: | C. |
www.opengl.org/documentation/glsl/ |
Den OpenGL Shading Language (förkortat: GLSL eller glSlang ) är ett programmeringsspråk att köra egna program, så kallade shaders , på grafikprocessorn med hjälp av OpenGL .
Skapande och vidareutveckling
I datorgrafik hänvisar skuggning till förändringen i enskilda vertices eller fragment inom grafikrörledningen . Skuggorna beräknar utseendet på ett objekt eller skapar specialeffekter. Typiska uppgifter är till exempel strukturering och belysning. I den klassiska (så kallade Fixed Function) OpenGL-pipelinen kan inte de enskilda beräkningsstegen för skuggningen ändras och endast enskilda parametrar kan konfigureras. För att övervinna denna begränsning introducerades GLSL som ett tillägg i OpenGL version 1.4. GLSL tillåter att delar av rörledningen definieras fritt med egna program. Så z. B. en speciell belysningsmodell eller en struktureffekt som bumpmappning kan implementeras.
Med OpenGL version 2.0 blev språket en officiell del av OpenGL- specifikationen , som definierar OpenGLs funktionella omfång. Den ursprungliga GLSL-versionen erbjöd endast en topp- och fragmentskuggning . Med OpenGL version 3.2 tillkom geometri-skuggaren , med version 4.0 med tesselleringskontroll och tessellering utvärderingsskuggor och med version 4.3 med beräkningsskuggning .
Med dagens GLSL-baserade pipeline kan alla bearbetningssteg på grafikkortet programmeras direkt , med undantag för rasterisering .
Nyckelord (precisionskvalificeringar) för det underordnade programmeringsspråket GLSL ES ingick också i specifikationen för GLSL . Dessa är endast avsedda för portabilitet med OpenGL ES och möjliga tillägg, men har som sådan ingen funktion eller mening i GLSL. Funktionerna för GLSL ES beskrivs i en separat specifikation och ingår därför inte i GLSL.
GLSL konkurrerar med HLSL , som ger motsvarande funktionalitet för Direct3D .
Språkfunktioner
GLSL är ett C- liknande programmeringsspråk som har anpassats speciellt till shaders behov. Det finns inbyggda typer för vektorer , matriser och en mängd olika matte- och grafikfunktioner. Många av de operationer som erbjuds kan fungera på flera dataelement samtidigt ( SIMD ). Till skillnad från C finns det dock inga tips .
Det finns fem olika GLSL-skuggtyper; Vertex, tessellation, geometri och fragmentskuggor som en del av rendering pipeline och de oberoende beräkningsskuggorna. Varje skuggningstyp har karakteristiska in- och utgångsparametrar. Applikationsutvecklaren förser OpenGL-drivrutinen med skuggkällkoden och alla ytterligare variabler och konstanter för varje skuggningstyp. Föraren sammanställer och länkar skuggorna till ett skuggprogram. Det är inte obligatoriskt att använda alla skuggtyper.
Varje primitiv som applikationen vill rita passerar nu genom skuggorna i skuggprogrammet i följande ordning:
1. Vertex-skuggning
Vertex shader körs en gång för varje vertex. Skuggaren har endast tillgång till toppunkten som just har hanterats (inklusive dess strukturkoordinater, normaler och andra överförda data), men inte till angränsande hörn, topologin eller liknande.
2. Tessellation skuggor
En yta (triangel eller kvadrat) kan delas in i mindre ytor på tessellationsfyrkanten. I implementeringen görs en åtskillnad mellan skuggor för tesselleringskontroll och skuggor för tessellering.
3. Geometryshader
I geometri-skuggningen kan nya primitiver skapas från en befintlig primitiv (punkt, linje, triangel).
4. Fragmentskuggare
Fragmentskuggningen körs en gång för varje fragment (pixlar innan de visas på displayenheten). Här beräknas färgen för motsvarande fragment. Fragmentskuggare motsvarar Direct3Ds pixelskuggor.
Beräkna skuggning
Denna skuggningstyp kan bearbeta data oberoende av grafikrörledningen och därmed utföra GPGPU- beräkningar i OpenGL-sammanhanget.
exempel
Ett exempel på ett GLSL-program som består av en toppunkt och en fragmentskuggning. Programmet skapar en röd silhuett av alla objekt.
Vertex skuggning
Denna vertex shader beter sig som den klassiska (fasta funktionen) OpenGL-pipelinen. Den ställer in förgrundsfärgen på toppunkten till den färg som anges av applikationen ( gl_Color
) och matrisen gl_ModelViewProjectionMatrix
placerar toppunkten ( gl_Vertex
) relativt kameran i rymden.
void main(void)
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Fragmentskuggare
Denna enkla fragmentskuggning ignorerar inmatningsfärgen ( gl_Color
) och ställer in fragmentfärgen till röd.
void main(void)
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
historia
Legend: | Gammal version | Aktuell version |
---|
version | offentliggörande | Beskrivning / ändringar |
---|---|---|
1.10 | 30 april 2004 |
|
1.20 | 2 augusti 2006 |
|
1.30 | 11 augusti 2008 |
|
1,40 | 24 mars 2009 |
|
1,50 | 3 augusti 2009 |
|
3.30 | 11 mars 2010 |
|
4.00 | 11 mars 2010 |
|
4.10 | 26 juli 2010 |
|
4.20 | 8 augusti 2011 |
|
4.30 | 6 augusti 2012 |
|
4.40 | 22. juli 2013 |
|
4,50 | 20 juli 2014 |
|
4,60 | 23 juli 2017 |
|
litteratur
- Randi Rost: OpenGL Shading Language . 1: a upplagan Pearson Education, 2004, ISBN 0-321-19789-5 .
- Heiko Ihde: Shader med GLSL: En introduktion till OpenGL Shading Language . 1: a upplagan Diplomica, 2009, ISBN 3-8366-7927-2 .
webb-länkar
- Språkspecifikation, version 4.60 (PDF; 915 kB; engelska)
- OpenGL Shading Language Tutorial lighthouse3d.com (engelska)
- Exempel på OpenGL Shading Language, interaktivt utbytbara!
Individuella bevis
- ↑ Språkspecifikation, version 4.30 (PDF; 830 kB; engelska)