Vývojář | NVIDIA, microsoft |
---|---|
Dialekty | Cg, HLSL, Playstation Shading Language |
Ovlivněn jazyky | C , RenderMan Shading Language |
Ovlivnil jazyky | GLSL |
Cg (z anglického C for graphics) je vyšší programovací jazyk pro psaní shaderů vyvinutý společností NVIDIA (od roku 2002). Syntakticky je velmi podobný jazyku High Level Shader Language (HLSL) od společnosti Microsoft.
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. Mezi důležitá rozšíření jazyka patří vektorové operace, operátor swizzle, další datové typy (half
, fixed
, vektorové a maticové typy, sampler
* typy pro textury).
Jazyk Cg je z hlediska syntaxe i použití velmi podobný (ve spoustě aspektů identický) jazyku High Level Shader Language (HLSL) od společnosti Microsoft.
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;
}