Cg語言

Cg語言

Cg語言(C for Graphics)是為GPU編程設計的高級著色器語言,由NVIDIA公司開發。Cg極力保留C語言的大部分語義,並讓開發者從硬體細節中解脫出來,Cg同時也有一個高級語言的其他好處,如代碼的易重用性,可讀性得到提高,編譯器代碼最佳化。最新版本為3.1,當前已不再被積極開發與支持.

語言簡介

Cg語言 Cg語言

Cg語言是為GPU編程設計的高級繪製語言,由NVIDIA公司開發。Cg極力保留C語言的大部分語義,並讓開發者從硬體細節中解脫出來,Cg同時也有一個高級語言的其他好處,如代碼的易重用性,可讀性得到提高,編譯器代碼最佳化。

Cg語言主要參照ANSI C建模,但也從C++和Java以及早期的繪製語言如RenderMan and the Stanford shading language中吸取了一些思想。這些使得很容易寫程式然後由編譯器進行最佳化,提高了可讀性。而且Cg的設計考慮了GPU的體系結構,如可程式多處理器單元(頂點處理器,像素處理器,外加不可程式單元). 這些部分和套用都是通過數據流連線起來。Cg語言允許分別為頂點和像素寫程式。Cg API引入了profiles的概念以處理頂點和像素編程所缺乏的通用性。一個Cg profile就定義了一套整個Cg語言的子集以適應不同的硬體平台和API。Cg程式可以根據運行時的需要或者事先編譯成GPU彙編代碼。這樣可以很容易地將一個Cg像素程式和手寫的頂點程式結合起來,或者甚至採用不可程式的OpenGL或者DirectX頂點流水線,反之亦然 。

數據類型

Cg 有6種數據類型(data types),跟 C語言相當類似,有一些是為 GPU 特別定義的,類型如下:

float - 32位元浮點數

half - 16位元浮點數

int - 32位元整數

fixed - 12位元定點數

bool - 布林值

sampler* - 代表紋理對象(texture object)

示例

// input vertex

struct VertIn { float4 pos : POSITION; float4 color : COLOR0; };

// output vertex

struct VertOut { float4 pos : POSITION; float4 color : COLOR0; };

// vertex shader main entry

VertOut main(VertIn IN, uniform float4x4 modelViewProj) {

VertOut OUT;

OUT.pos = mul(modelViewProj, IN.pos); // calculate output coords

OUT.color = IN.color; // copy input color to output

OUT.color.z = 1.0f; // blue component of color = 1.0f

return OUT;}

發展現狀

Cg工具包是一個遺留NVIDIA工具包不再被積極開發或支持。 Cg 3.1是最後的發行版本,NVIDIA仍繼續將其提供給開發人員,但不推薦在新的開發項目使用它,因為在新的硬體環境下它可能不被支持。我們更推薦GLSL或HLSL Windows應用程式,而不是Cg。

相關詞條

相關搜尋

熱門詞條

聯絡我們