Main Page

encyclopedia.codeboy.net

 

Cg Programming Language

Category:Programming languages \nCg or C for Graphics is a High level shader language created by nVidia for programming vertex and pixel shaders. Cg is based on the C programming language, they share the same syntax, however, some features of C were modified and new data types were added to make Cg more suitable for programming graphics processing units.

Table of contents
1 Background
2 Details
3 Applications and games that use Cg
4 See also
5 External links

Background

\nAs a result of the technical advancements in graphics cards technology, some areas in 3D graphics programming have become quite complex, to solve the problem, new features where added to graphics cards to simplify the process, including the ability to modify the rendering pipeline of the graphics card using vertex and pixel shaders. In the beginning, vertex and pixel shaders were programmed at a very low level, using the assembly language of the graphics processing unit, although that using the assembly language gave the programmer complete control over code and flexibility, it was pretty hard to use, and non-portable, a higher level language for programming the GPU was needed, and Cg was created to overcome these problems and make shader development easier. Some of the benefits of using Cg over assembly are:\n* High level code is easier to program, read, and understand than assembly code.\n* Cg code is portable to a wide range of hardware and platforms, unlike assembly code, which usually depends on hardware and the platforms it's written for.\n* The Cg compiler can optimize code and do lower level tasks automatically, which are hard to do and error prone in assembly.

Details

\n

Data types

\nCg has six basic data types, some of them are the same as in C, others are especially added for GPU programming, these types are:\n* float - a 32bit floating point number\n* half - a 16bit floating point number\n* int - a 32bit integer\n* fixed - a 12bit fixed point number\n* bool - a boolean variable\n* sampler* - represents a texture object Cg also features vector and matrix data types that are based on the basic data types, such as float3, float4x4, such data types are quite common when dealing with 3D graphics programming, Cg also has struct and array data types, which work in a similar way to C equivalents.

Operators

\nCg supports a wide range of operators, including the common arithmetic operators from C, the equivalent arithmetic operators for vector and matrix data types, and the common logical operators.

Functions and control structures

\nCg shares the basic control structures with C, like if/else, while, and for. It also has the a similar way of defining functions.

The standard Cg library

\nAs in C, Cg features a set of functions for common tasks in GPU programming. Some of the functions have equivalents in C, like the mathematical functions abs and sin, while others are specialized in GPU programming tasks, like the texture mapping functions tex1D and tex2D.

The Cg runtime library

\nCg programs are merely vertex and pixel shaders, and they need supporting programs that handle the rest of the rendering process, Cg can be used with two
APIs, OpenGL or DirectX, each has its own set of Cg functions to communicate with the Cg program, like setting the current Cg shader, passing parameters, and such tasks.

A sample Cg vertex shader

\n // input vertex\n struct VertIn {\n float4 pos : POSITION;\n float4 color : COLOR0;\n };
// output vertex\n struct VertOut {\n     float4 pos   : POSITION;\n     float4 color : COLOR0;\n };
// vertex shader main entry\n VertOut main(VertIn IN, uniform float4x4 modelViewProj) {\n     VertOut OUT;\n     OUT.pos     = mul(modelViewProj, IN.pos); // calculate output coords\n     OUT.color   = IN.color; // copy input color to output\n     OUT.color.z = 1.0f; // blue component of color = 1.0f\n     return OUT;\n }

Applications and games that use Cg

\n*
Far cry

See also

\n*
Computer programming\n* Computer graphics\n* Vertex and pixel shaders\n* High level shader language\n* OpenGL\n* DirectX

External links

\n*
nVidia\n* Cg home page\n* OpenGL home page\n* DirectX home page\n* CgShaders.org\n* NeHe Cg vertex shader tutorial\n* Far Cry \n

"Maybe this world is another planet's Hell." - Aldous Huxley (1894-1963)