A HLSL programozási nyelv

Alprogramok, modulok

Függvények és eljárások

Deklaráció:

[StorageClass] [precise] Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };

StorageClass - Opcionálisan megadható.

Értéke az inline lehet. Ezzel minden függvényhívásnál generál egy másolatot a függvény törzséből fordításkor, ugyanúgy mint C++-nál, ezzel a tárgykód nő, de a program gyorsabb lehet, kisebb függvényhívásoknál javasolt

Return_Value – Visszatérési érték típusa, lehet void is.

Name – Függvény neve

ArgumentList – Opcionális, paraméterek listája. Ez eltérő a C++-hoz képest. Deklarációja:

[InputModifier] Type Name [: Semantic] [InterpolationModifier] [= Initializers]

InputModifier - ezzel adható meg hogy a paraméterünk input, output vagy mindkettő, hasonlóan az ADA-ban. In esetén csak input, Out esetén csak output, Inout esetén mindkettő, Uniform esetén pedig input lehet csak, és konstansnak kell lennie

InterpolationModifier – ezzel adhatjuk meg hogy milyen interpoláció végezhető el az adott típuson, ez alapból lineáris, ha nem adunk meg semmit.

Initializers – azonosítót adhatunk meg a paraméternek

Semantic – Opcionális. Ez fontos, hiszen ha a következő shader-nek akarunk adatot átadni, akkor itt meg kell adni, hogy ez a függvény milyen adatot fog visszaadni. Később lesz rá példa.

StatementBlock – Függvény törzse

Geometry shadereknél kicsit más a függvénydeklaráció, azt itt most nem részletezem. Lásd itt.

Visszatérési érték ugyanúgy működik mint C++-ban, tehát a return kulcsszóval.

HLSL-ben rengeteg beépített függvény van, ezek listája megtalálható itt.

Érdemes ezeket használni, mivel sok művelet már előre meg van írva, illetve ezek optimalizált kódok.

Példa:

struct VS_OUTPUT { float4 Position : SV_POSITION; float4 Diffuse : COLOR0; float2 TextureUV : TEXCOORD0; }; VS_OUTPUT RenderSceneVS( float4 vPos : POSITION, float3 vNormal : NORMAL, float2 vTexCoord0 : TEXCOORD, uniform int nNumLights, uniform bool bTexture, uniform bool bAnimate )

Túlterhelés

Lehetőség van HLSL-ben a függvények túlterhelésére a visszatérési értékkel, névvel, paraméterek típusával, vagy számával, tehát ugyanúgy mint C++-ban.