Tento článek se bude zabývat problémem Cg (programovací jazyk), který v poslední době nabyl značného významu. Cg (programovací jazyk) se stal tématem zájmu širokého spektra lidí, protože jeho vliv zasahuje do různých oblastí každodenního života. Od osobní až po profesionální úroveň se Cg (programovací jazyk) umístil jako bod diskuse a reflexe v různých oblastech. V tomto článku budou analyzovány různé aspekty související s Cg (programovací jazyk) s cílem nabídnout ucelenou a obohacující vizi tohoto aktuálního problému.
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;
}