A Cg programozási nyelv

Fordítók



Cg fordítók

A Cg szabvány 2.0 változata 2007. december 19-e óta elérhető. Ez a 1.5-s fordítót váltotta fel. A 2.0-ás szabvány a régivel teljesen kompatibilis, ahhoz képest csak bővítéseket tartalmaz.

Az új kiadás fontosabb lehetőségei:

A fordító, a Cg Runtime Library valamint a dokumentáció a Cg Toolkit oldaláról tölthető le.

Használat CPU-n futó programmal

Mivel a shader programok minden esetben valamilyen CPU-n futóprogram segítségével futnak, ezért a parancssori fordító mellet lehetőség van a főprogram futása közben, a Cg Runtime Library függvényeinek hívásával fordítani a programot.

A fordításhoz mindkét esetben meg kell adni a shader belépési pontjaként használandó függvény nevét, és a használni kívánt profilt.

A profilok nyelvi szintű használatának igazi előnye a főprogramból való fordításkor jelentkezik, mert a főprogram a Cg Runtime Library segítségével le tudja kérdezni a gépen használható legfejlettebb profilt, és arra tudja fordítani a shader-t.

A lefordított program videokártyára töltéséhez, valamint a főprogram és a shader-ek közti adatkapcsolatok meghatározásához szintén a Cg Runtime Library függvényei adnak lehetőséget.

A következő kódrészlet OpenGL alatt mutatja be egy vertex shader betöltéséhez szükséges lépéseket.

#include <Cg/cg.h> #include <Cg/cgGL.h> /* ... */ CGcontext myCgContext; CGprofile myCgVertexProfile; CGprogram myCgVertexProgram; const char *myVertexProgramFileName = "example.cg", /* a Cg forrás file-jának neve */ *myVertexProgramName = "vertex_main"; /* belépési függvény neve */ /* a Cg programokat tartalmazó környezet létrehozása */ myCgContext = cgCreateContext(); /* a támogatott legfejlettebb vertex profile lekérdezése */ myCgVertexProfile = cgGLGetLatestProfile(CG_GL_VERTEX); /* a Cg forrás betöltése és fordítása */ myCgVertexProgram = cgCreateProgramFromFile( myCgContext, /* Cg környezet */ CG_SOURCE, /* forrás file-t tölt be */ myVertexProgramFileName, /* file név */ myCgVertexProfile, /* a fordítás cél profilja */ myVertexProgramName, /* belépési függvény neve */ NULL); /* átadandó beállítások a fordítónak */ /* lefordult program betöltése */ cgGLLoadProgram(myCgVertexProgram);

Interaktív fejlesztés

A fentiek helyett shader programok interaktív fejlesztéséhez használható az NVIDIA FX Composer környezet. A FX Composer HLSL nyelven írt shader-ek készítésére szolgál, de a két nyelv közti minimális különbség miatt jól használható Cg programok fejlesztéséhez is.