A Cg programozási nyelv

Bevezetés



Shader-ek

A különböző shader-ek grafikus kártyák processzorán futó programok, amelyek a képelőállítás alapértelmezett folyamatának bizonyos lépései helyett alkalmazhatók.

Jelenleg három fajtája támogatott az OpenGL és DirectX API-k és videokártyák által, ezek a következők:

Ezeken felül egy negyedik fajta az úgynevezett unified shader, ami fenti típusok egyesítése. A unified shader programok nincsenek korlátozva egy típus által elérhető utasításokra, hanem a grafikus processzor által végrehajtható összes utasítást használhatják. 2007 januárjában ez a lehetőség még csak az NVIDIA GeForce 8-as sorozatú kártyáin érhetők el.

Az egyes shader fajták helyét a grafikus szerelőszalagon a következő ábra mutatja:

pipeline

A unified shader-eknek nincs meghatározott helye a szerelőszalagon.

A nyelv eredete

A Cg a C for Graphics név rövid alakja. A nyelvet az NVIDIA fejlesztette ki 2002-ben, a Microsofttal szorosan együttműködve. A készítők magas szintű programozási nyelvet akartak létrehozni a grafikus kártyák processzorainak programozására, úgynevezett shader-ek írásához.

A magas szintű shading nyelvek fejlesztésének célja, hogy segítségükkel a fejlesztők könnyebben írhassanak átláthatóbb programokat, és ezeket minél egyszerűbben lehessen különböző hardvereken futtatni. Ennek szellemében, a Cg programok nem csak NVIDIA, hanem az ATI és más gyártók videokártyáin is futtathatók.

A nyelv Microsoft-féle implementációja a High Level Shading Language, röviden HLSL. Nyelvi elemekben csak kisebb eltérések vannak a két nyelv között, fő különbséget a felhasználhatósági körük jelenti.

Míg a HLSL csak DirectX-szel, így Windows-on és Xbox 360-on használható, a Cg OpenGL alól is használható. Emiatt a Cg nyelven írt shader-eket futtató programok használhatók Windows, Linux, Mac OS X operációs rendszereken és Xbox 360 konzolokon is.

Az OpenGL Architecture Review Board-nak is létezik GPU-kat célzó programozási nyelve, GLSL néven. Ez a nyelv jobban különbözik a Cg-től, mint az a HLSL-től, valamint csak az OpenGL API-val használható.

A nyelv és a shader-ek használati területe

A Cg nyelvet hardverközpontú, általános programozási nyelvnek tervezték.

Elsődleges felhasználási területe a játékprogramok teljesen programozható megjelenítése volt, feloldva az úgynevezett rögzített szerelőszalag korlátait. Ugyan ennek a korlátnak megkerülésére kezdték alkalmazni háromdimenziós tervező, modellező és animációs programokban.

A Windows Vista Areo elnevezésű grafikus felhasználói felülete erősen támaszkodik a programozható videokártyák adta lehetőségekre.

A nyelv lehetőségeit a legmesszebb a GPGPU trend viszi, ami a General-Purpose Computing on Graphics Processing Units elnevezés rövidítése.

Ide tartoznak a GPU-k nem grafikai célokra történő felhasználásával foglalkozó munkák. A témának a mai GPU-k hatalmas számítási kapacitása, és a shader programozási nyelvek kifejező ereje ad létjogosultságot. Gyakorlatilag nagysebességű steam processing feladatokra használja a videokártyákat.

A GPU-k sebességét általában grafikai megközelítésből adódó mérőszámokkal adják meg, mint a háromszög per másodperc és texel per másodperc. Ezek a fogalmak nagyjából háromszögek esetén három lebegőpontos számnégyesnek, illetve texelek csökkentett intervallumú lebegőpontos számnégyesnek felelnek meg.

A jelenleg elérhető videokártyák sebessége több mint 180 millió háromszög per másodperc és 10 milliárd texel per másodperc.

Pár példa a GPU-n megoldható általános problémákra: