A Cg (a C for Graphics rövidítése [1] ) egy magas szintű programozási nyelv , amelyet az Nvidia fejlesztett ki a Microsofttal szoros együttműködésben shader programozáshoz . A Cg a C programozási nyelven alapul . Annak ellenére, hogy ugyanazt a szintaxist használják , néhány C függvény megváltozott, és új adattípusok kerültek hozzáadásra, hogy a Cg alkalmasabb legyen a GPU programozására . Ez a nyelv a GPU programozására specializálódott, és nem használják GPGPU -hoz . A Cg fordító DirectX vagy OpenGL shader programokat ad ki . 2012-től a Cg elavult, további támogatás nélkül. [2]
A számítógépes grafika technológiai fejlődésének köszönhetően a 3D-s grafikai programozás egyes területei meglehetősen bonyolulttá váltak. A folyamat egyszerűsítése érdekében a grafikus kártyákat új funkciókkal egészítették ki, beleértve a renderelési folyamatok shaderekkel történő megváltoztatásának lehetőségét.
Kezdetben a shadereket nagyon alacsony szinten és csak assembly nyelven programozták . Bár az assembly nyelv használata teljes ellenőrzést és rugalmasságot biztosított a programozónak a kód felett, használata meglehetősen nehézkes volt. Kényelmesebb, magas szintű GPU-programozási nyelvre volt szükség, ezért a Cg-t e problémák megoldására és a shader-fejlesztés megkönnyítésére hozták létre.
A Cg néhány előnye:
A Cg-nek hat alapvető adattípusa van . Némelyikük ugyanaz, mint a C-ben, de vannak olyanok is, amelyek kifejezetten GPU programozáshoz lettek hozzáadva. Ezek a típusok:
A Cg vektoros és mátrixos adattípusokat is tartalmaz olyan alapvető adattípusok alapján, mint a float3és float4x4. Ezek az adattípusok meglehetősen gyakoriak a 3D programozás során. A Cg struktúra és tömb adattípusokkal is rendelkezik, amelyek hasonlóan működnek, mint a C megfelelőik.
A Cg operátorok széles skáláját támogatja, beleértve a C általános aritmetikai operátorait, a vektor- és mátrixadattípusok egyenértékű aritmetikai operátorait, valamint az általános logikai operátorokat.
A Cg támogatja az alapvető C vezérlőstruktúrákat, mint például a if ... else, whileés for. Hasonló módon határozza meg a funkciókat.
A C-hez hasonlóan a Cg is rendelkezik funkciókkal a gyakori GPU programozási feladatokhoz. Néhány függvénynek C megfelelője van, például a matematikai függvényeknek absés a sin, míg mások grafikus programozási feladatokra specializálódtak, mint például a textúra-leképezési funkciók tex1Dés a tex2D.
A Cg programok csak árnyékolók, és támogató programokra van szükségük, amelyek kezelik a renderelési folyamat többi részét. A Cg két grafikus API -val használható : OpenGL vagy DirectX . Mindegyiknek megvan a saját funkciója a Cg programmal való kommunikációhoz, mint például az aktuális Cg shader beállítása, paraméterek átadása stb.
Amellett, hogy képes Cg forráskódot fordítani összeállításhoz, a Cg futtatókörnyezet képes árnyékolókat is lefordítani a támogató program futási idején. Ez lehetővé teszi, hogy a shader az aktuálisan futó hardverhez elérhető legfrissebb optimalizálásokkal legyen lefordítva . Ez a módszer azonban megköveteli, hogy a shader forráskódja egyszerű szövegben elérhető legyen a fordító számára, lehetővé téve a program felhasználója számára, hogy hozzáférjen a shader forráskódjához. Egyes fejlesztők ezt tekintik ennek a technikának a fő hátrányának.
A shader forráskódjának felfedésének elkerülése és bizonyos hardveroptimalizálások támogatása érdekében kidolgozták a profilok koncepcióját. A Shaderek különböző grafikus hardverplatformok szerint (profilok szerint) összeállíthatók. A támogató program végrehajtásakor a leginkább optimalizált shader betöltődik a profiljának megfelelően. Lehet például egy grafikus kártya profilja, amely támogatja az összetett shadereket, és egy másik profil, amely csak minimális shadereket támogat. Azáltal, hogy mindegyik profilhoz egy shader-t hoz létre, a támogató program növeli a támogatott hardverplatformok számát anélkül, hogy feláldozná a képminőséget a nagy teljesítményű rendszereken.
Nvidia | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
GPU-k ( összehasonlítás ) _ |
| ||||||||||
Alaplapi lapkakészletek ( összehasonlítás ) _ |
| ||||||||||
Egyéb |
|