A GLSL programozási nyelv

Nyelvi elemek

Jelkészlet

A lehetséges karakterek az UTF-8 kódolású Unicode karakterek egy részhalmaza.

A jelkészlet a következő karakterekből áll: a-z, A-Z, _, 0-9, ., +, -, /, *, %, <, >, [, ], (, ), {, }, ^, |, &, ~, =, !, :, ;, vessző, ?, #, \, szóköz, horizontális tab, vertikális tab, soremelés, kocsi vissza, lapemelés

Bármilyen más karakter használata hibát eredményez, kivéve a megjegyzéseket, ahol csak a 0 byte értékű karakter nem használható. Nincsenek escape szekvenciák, idézőjelek és "end of file" karakter sem. A nyelv érzékeny a kis- és nagybetűk használatára.

Forrás szöveg

A forráskód a jelkészletből alkotott string, amely több sorban helyezkedhet el. A forráskód sorainak vége tartalmazhat egy \ (line continuation) karaktert. Ha ezt használjuk, akkor az ezzel a karakterrel elválasztott sorok összekonkatenálódnak még mielőtt a megjegyzések feldolgozása, az előfeldolgozó végrehajtása és a tényleges fordítás megtörténne.

float f\ oo;

Ebből az lesz, hogy float foo;

Preprocesszor direktívák

A C++ nyelvben is jelenlévő preprocesszor direktívák használhatók az #include -ot kivéve és ezen felül még van néhány más direktíva is.

#, #define, #undef, #if, #ifdef, #ifndef, #else, #elif, #endif, #error, #pragma, #extension, #version, #line, defined, ##

Vannak előredefiniált makrók is:

A két __ jelet tartalmazó és a "GL_" prefix-el kezdődő makrók foglaltak.

A következő direktívákkal az optimalizációt lehet kapcsolgatni (az on az alapértelmezett):

#pragma optimize(on) #pragma optimize(off)

A következő direktívákkal a debug módot lehet kapcsolgatni (az off az alapértelmezett):

#pragma debug(on) #pragma debug(off)

A #version direktívával lehet megadni azt, hogy a GLSL mely verzióját szeretnénk használni.

#version number profile

4.2-es verziónál a 420-at kell megadni. Ha nem adjuk meg ezt a direktívát, akkor az alapértelmezett 1.10 verziót fogja használni. A #version direktívának a forrás legelején kell lennie, csak megjegyzések és white space-ek előzhetik meg. A 100-as verzió megadása az OpenGL ES Shading Language használatát jelöli. A 4.20-as verziójú shaderek-kel a 1.40, 1.50, 3.30, 4.0 és 4.1 verziószámú shader-ek szerkeszthetők össze. A profile megadása opcionális, amely lehet core vagy compatibility. Az alapértelmezett a core. A compatibility tartalmazza a core profilban lévő jellemzőket és további specifikus jellemzőket is.

A nyelvhez további jellemzőket adhatunk hozzá kiterjesztések használatával, úgy, hogy a fordító viselkedését befolyásoljuk. Ezt a következő direktívák valamelyikével adhatjuk meg:

#extension extension_name : behavior #extension all : behavior

Az all azt jelenti, hogy a fordító által támogatott összes kiterjesztés viselkedését beállítjuk behavior-ra.

A behavior a következők valamelyike lehet:

Ha nem adjuk meg az #extension direktívát, akkor az ekvivalens a következő megadásával:

#extension all : disable

Megjegyzések

Megjegyzésekben bármilyen byte érték használható, kivéve a 0 byte értéket. Létezik a többsoros /*...*/ és az egysoros // megjegyzés és ezek nem ágyazhatók egymásba. A megjegyzések feldolgozása a \ (line continuation) karakterek feldolgozása után történik.

Azonosítók

Az azonosítók a C nyelvhez hasonlóan _, a-z, A-Z karakterek valamelyikével kezdődhetnek, majd ugyanezekkel és a 0-9 karakterek valamelyikével folytatódhatnak. A "gl_" előtaggal kezdődő azonosítók foglaltak az OpenGL számára, így ilyen azonosítók nem deklarálhatók, viszont speciális esetben újradeklarálhatók.