1 / 15

Cg – C for Graphics

Cg – C for Graphics. Eric Vidal CS 280. History. General graphics processing languages Renderman shading language (1988) Assembly languages for graphics card processing DirectX 8/9 vertex shaders and pixel shaders (2000, 2002) OpenGL ARB_vertex_program/ARB_fragment_program (2002)

banyan
Download Presentation

Cg – C for Graphics

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cg – C for Graphics Eric Vidal CS 280

  2. History • General graphics processing languages • Renderman shading language (1988) • Assembly languages for graphics card processing • DirectX 8/9 vertex shaders and pixel shaders (2000, 2002) • OpenGL ARB_vertex_program/ARB_fragment_program (2002) • High-level languages for graphics card processing • DirectX High Level Shading Language (HLSL) (2002) • OpenGL Shading Language (glslang) (2003) • Cg – C for Graphics (2002)

  3. History • Cg – C for Graphics • Developed in 2002 by NVIDIA Corporation in close collaboration with Microsoft • Supports OpenGL and DirectX (does not replace them) • Supported in Windows, Mac OS X and Linux • Proprietary (but language specification is open) • Cg compiler technology is open-source

  4. Rationale • Do graphics-related processing (“shading”) in graphics card • Offloads work from the main processor • Higher performance • Cg is a high-level language • Easier to understand than graphics card “assembly language” (DirectX vertex/pixel shaders, OpenGL vertex/fragment programs) • Code portability across graphics cards

  5. Features • Two types of Cg programs: • Vertex programs • Fragment programs • On-the-fly compilation supports several target graphics assembly language formats: • DirectX 8 vertex/pixel shaders (vs_1_1, ps_1_3) • DirectX 9 vertex/pixel shaders (vs_2_0, ps_2_x) • OpenGL vertex/fragment program extensions (arbvp1, arbfp1) • NVIDIA proprietary OpenGL extensions (vp20, fp20, vp30, fp30)

  6. Features • First class support for vector data types • float4 – vector of four floats • float4x4 – square matrix with 16 elements • Same operators as C • Works with vectors as well as with scalars float scalar = 4.0; float4 vector = float4(1.0, 2.0, -1.0, 3.0), result; /* this properly scales “vector” by “scalar” */ result = scalar * vector;

  7. Features • uniform parameters • input semantics (for non-uniform parameters) • out, inout parameters void simpleTransform(float4 objectPosition : POSITION, float4 color : COLOR, float4 decalCoord : TEXCOORD0, float4 lightMapCoord : TEXCOORD1, out float4 clipPosition : POSITION, out float4 oColor : COLOR, out float4 oDecalCoord : TEXCOORD0, out float4 oLightMapCoord : TEXCOORD1, uniform float brightness, uniform float4x4 modelViewProjection)

  8. Features • Structures and arrays (including multidimensional arrays) • All of C’s arithmetic operators • boolean type • Boolean/relational operators (||, &&, !, etc.) • Increment/decrement operators (++, --) • Conditional expressions (?, :) • Assignment expressions (=, +=, etc.)

  9. Features • User-defined functions • But no recursive functions! • Control flow constructs • do, while, for, if, break, continue • No switch and goto! • Data types • float, half, double • int • fixed

  10. Features • #include, #define, #ifdef • C and C++-style comments • Swizzling and write-masking float4 vec1 = float4(1.0, 2.0, 3.0, 4.0); float2 vec2 = vec1.yx; // vec2 = (2.0, 1.0); float scalar = vec1.w; // scalar = 4.0; float3 vec3 = scalar.xxx; // vec3 = (4.0, 4.0, 4.0); vec1.xw = vec3; // vec1 = (4.0, 2.0, 3.0, 4.0); • discard keyword (similar to return, but no return value)

  11. Features • Built-in library functions for graphics math • abs() • log2() • mul() • dot() • normalize() • lerp() • specular() • reflect() • ... and more! (No need to #include)

  12. (Non-)Features • Pointers • Bitwise operations • Unions • Function variables • String processing • File I/O • Memory allocation/deallocation • C++ classes, templates, overloading, exceptions

  13. Sample Programs

  14. Applications Using Cg • Unreal engine (Epic Games, Inc.) • Aurora engine (Bioware Inc.) • Storm engine (Blizzard Entertainment) • Other game companies (Electronic Arts, Ensemble Studios, Ion Storm, LithTech, Maxis, Microsoft Games) • Third party content creation tools • Alias Wavefront Maya 4.5 • Discreet 3ds max 5 • SOFTIMAGE|XSI v.3.0

  15. Where to Get Cg • Main Cg Website: • http://developer.nvidia.com/page/cg_main.html • Cg Language Specification: • http://developer.nvidia.com/object/cg_specification.html • Cg Compiler and Toolkit: • http://developer.nvidia.com/object/cg_toolkit.html

More Related