Cg

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]

Általános információk

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:

Részletek

Adattípusok

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.

Operátorok

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 vezetés funkciói és struktúrái

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.

Cg Standard Library

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.

Cg futásidejű könyvtár

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.

Cg shader példa

// input vertex struct VertIn { float4 pos : POSITION ; float4 szín : COLOR0 ; }; // kimeneti csúcs struct VertOut { float4 pos : POSITION ; float4 szín : COLOR0 ; }; // vertex shader fő bejegyzése VertOut main ( VertIn IN , egységes float4x4 modelViewProj ) { VertOut OUT ; KI . pos = mul ( modelViewProj , IN . poz ); // kimeneti koordináták kiszámítása OUT . szín = IN . szín ; // a bemeneti szín másolása az OUT kimenetre . szín . z = 1,0 f ; // szín kék összetevője = 1.0f return OUT ; }

Jegyzetek

  1. Cg GYIK . Letöltve: 2018. szeptember 7. Az eredetiből archiválva : 2018. szeptember 7..
  2. Cg Toolkit | NVIDIA fejlesztő . Letöltve: 2018. szeptember 7. Az eredetiből archiválva : 2018. szeptember 7..