A HLSL programozási nyelv

Bevezetés

Mire jó a shader program?

Röviden a shaderek, olyan programok, melyeket a Graphical Processing Unit (GPU) hajt végre, vertex-eket illetve pixel-eket dolgoznak fel, és műveleteket hajtanak végre rajtuk.

Először is itt egy ábra a könnyebb megértésért, ez a grafikus csővezeték. A pirossal bekarikázottak a shaderek, amiket mi írhatunk meg:

pipeline

Eddig ezek teljesen automatikus folyamatok voltak. A vertex shader a T&L(Transform and Lighting) leváltására készült, a pixel shader pedig a pixeleken végzett textúra mintavételezés, illetve a képernyőre kirajzolandó pontok színének előállítását adja a programozó kezébe. A geometry shader a DirectX 10 óta van a Direct3D pipeline-ban. Közvetlenül a vertex shader után jön, tehát a vertex shader-től kapott adatokat használja. Pontokkal, vonalakkal, háromszögekkel dolgozik, és képes új primitíveket létrehozni.

Tehát megcsináljuk azt, amit az automata folyamat amúgy is megcsinálna, ezután mi dönthetünk, hogy még milyen műveleteket végzünk el, mit adunk tovább a szerelőszalagon. Így sokkal realisztikusabb képet hozhatunk létre, azáltal hogy továbbfejlesztjük ezt az automatikus folyamatot, tehát létrehozzuk a mi shader programunkat.

Régen alacsony szintű assembly nyelvet használtak GPU programozásra, majd kialakultak a magasszintű shader nyelvek, ezek közül az egyik a HLSL. Mindegyik shader nyelvre jellemző, hogy nagyon hasonlóak szintaktikailag a C-hez.

A HLSL

A High Level Shader Language, vagy High Level Shading Language (HLSL), a magasszintű shader nyelvek közé tartozik, melyet a Microsoft fejlesztett ki, tehát csak DirectX-el használható, itt is csak a 9.0 felettieknél. Ebből következik, hogy csak Windows platformon, illetve Xbox alatt használható.

Más shader nyelvek

A HLSL mellett természetesen léteznek más shader nyelvek is.

Az egyik legfontosabb a Cg (C for Graphics). Ezt az Nvidia fejlesztette ki a Microsoft-tal együttműködve. Azért fontos, mert hordozható, tehát API-(DirectX, OpenGL) és platformfüggetlen(Windows, Mac Os, Linux).

Az HLSL-hez nagyon hasonló a GLSL (OpenGL Shading Language), mely az OpenGL-hez használható, ebből pedig következik, hogy ez is platformfüggetlen.

A Jövő

A DirectX 11-be már a HLSL újabb verziója is belekerül, a HLSL 5.0. Ebben már lehetőség lesz a General Purpose computing with GPU-ra (GPGPU) a Compute shader-ekkel, ami kibővíti a shader-es csővezetéket nem grafikai számításokra is, hasonlóan az OpenCL-hez, vagy az Nvidia CUDA-hoz. Szintén a HLSL 5.0-ától kezdve lehetőség lesz saját osztályok létrehozására, öröklődésre, templatek használatára.