V sobotu 2. listopadu proběhla mohutná oslava naší plnoletosti !!
Multimediaexpo.cz je již 18 let na českém internetu !!
V tiskové zprávě k 18. narozeninám brzy najdete nové a zásadní informace.

Cg

Z Multimediaexpo.cz

Verze z 12. 11. 2011, 19:32; Sysop (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

Cg (z anglického C for graphics) je vyšší programovací jazyk pro programování vertex a pixel shaderů od firmy NVidia (od roku 2002). Syntakticky je velmi podobný HLSL.

Z důvodu možnosti dvoustupňového překladu může být pro běh zapotřebí Cg runtime (překlad programu pak probíhá i dynamicky, tj. až v době běhu aplikace pro konkrétní GPU). V této souvislosti se hovoří o cílových profilech (konkrétní verze shaderů a tedy instrukční sady).

Syntaxe jazyka Cg je odvozena od jazyka C. Důležitými rozdíly jsou např. tzv. operátor „swizzle” („.“), vektorové operace, další datové typy (half, fixed, vektorové a maticové typy, sampler* typy pro textury).

Obsah

Swizzle operátor

Tento oprátor slouží k přístupu ke složkám vektorů a matic. Složky mohou být duplikovány nebo vynechány. Pro vektory jsou vyhrazeny dvě rovnocenné sady znaků „xyzw“ a „rgba”. Pro matice jsou vyhrazeny číslice „_m<řádek><sloupec>”, například a = b.wzyy;.

Navázání dat

Identifikace dat procházejících skrze pipeliny probíhá pomocí identifikátorů oddělených od parametru dvojtečkou, například in float4 norm : NORMAL;.

Příklad

Vertex shader v Cg:

 // vstupní vrchol
 struct VertIn {
     float4 pos   : POSITION;
     float4 color : COLOR0;
 };
 
 // výstupní vrchol
 struct VertOut {
     float4 pos   : POSITION;
     float4 color : COLOR0;
 };
 
 // vstup vertex shaderu
 VertOut main(VertIn IN, uniform float4x4 modelViewProj) {
     VertOut OUT;
     OUT.pos     = mul(modelViewProj, IN.pos); // spočítej výstupní souřadnice
     OUT.color   = IN.color; // zkopíruj vstupní barvu do výstupní
     OUT.color.z = 1.0f; // modrá složka barvy = 1.0f
     return OUT;
 }

Související články

Externí odkazy