Cg („C for Graphics“) ist eine Hochsprache für GPU-Shader, die Nvidia ab 2002 zusammen mit Microsoft entwickelte. Sie ist eng mit HLSL verwandt (beide teilen dieselbe Sprachfamilie und frühe Compiler-Basis), funktioniert aber API-übergreifend: Ein Cg-Shader konnte sowohl unter OpenGL als auch unter Direct3D eingesetzt werden. Das SIGGRAPH-Paper „Cg: A System for Programming Graphics Hardware in a C-like Language“ (2003, u. a. Mark Kilgard und Randima Fernando) dokumentierte das System.

Besonderheiten

  • Cross-API: derselbe Shader-Code für OpenGL- und DirectX-Pipelines, wählbar über Profile
  • Profile: arbvp1/arbfp1 (OpenGL-Assembly), vp40/fp40 (GeForce-6/7), vs_2_0/ps_3_0 (DirectX)
  • cgc-Compiler: übersetzt Cg nach DirectX-Assembly, OpenGL-Assembly, GLSL oder HLSL
  • CgFX: Effekt-Framework, das Techniken, Passes und Shader in einer Datei bündelt

Grundgerüst

void main(
    float4 position : POSITION,
    out float4 oColor : COLOR
) {
    oColor = float4(1.0, 0.5, 0.0, 1.0);
}

Die C-ähnliche Syntax kennt Vektortypen wie float4, Matrizen, Semantics (POSITION, TEXCOORD0, COLOR) und Uniform-Parameter für Werte aus der Anwendung.

Ende und Erbe

Nvidia stellte Cg mit Version 3.1 (April 2012) ein. Die Sprache beeinflusste jedoch die Entwicklung von GLSL und HLSL nachhaltig, und viele Konzepte — Semantics, Profile, Effekt-Frameworks — leben in modernen Systemen weiter (z. B. SPIR-V als plattformneutrales Shader-Format).

Alternativen und Verwandte: GLSL für OpenGL, HLSL für DirectX. Für Nvidias heutige Rechen-Plattform auf der GPU ist CUDA der Nachfolger-Ansatz, für universelle GPU-Berechnungen GPGPU.