Cg(C for Graphic)語言語義綁定方法

摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU編程與CG語言之陽春白雪下里巴人”

 

語義綁定方法  

入口函數輸入/ 輸出數據的綁定語義有4 四種方法(文獻【3 】第260 頁)

1.        綁定語義放在函數的參數列表的參數聲明後面中:

[const] [in | out | inout]<type><identifier> [ : <binding-semantic>][=<initializer>]

其中, const 作爲可選項,修辭形參數據; in out inout 作爲可選項,說明數據的調用方式; type 是必選項,聲明數據的類型; identifier 是必選項,形參變量名;一個冒號 加上一個綁定語義,是可選項;最後是初始化參數,是可選項。如下代碼所示。形參列表中的參數一、參數二綁定到輸入語義;參數三、參數四綁定到輸出語義;儘管參數一和參數 3 的綁定語義詞一樣,但前者是輸入語義,後者是輸出語義,所以這兩個參數數據所對應的硬件位置是不一樣的。

 

void mian_v(float4 position_obj : POSITION,

           float3 normal_obj : NORMAL,

 

           out float4 oPosition : POSITION,

           out float4 oColor  : COLOR,

 

          uniform float4x4 modelViewProj)

{

………………

}

2.        綁定語義可以放在結構體( struct )的成員變量後面:

struct <struct-tag>

{

       <type><identifier> [:<binding-semantic >];

};

舉例如下,結構 C2E1v_Outpu 中的 2 個成員變量分別綁定到語義 POSITION COLOR ,然後在 C2E1v_green 頂點程序入口函數中輸出,所以 C2E1v_Outpu 中的語義是輸出語義。

 

struct C2E1v_Output {

  float4 position : POSITION;

  float3 color   : COLOR;

};

 

C2E1v_Output C2E1v_green(float2 position : POSITION)

{    

  C2E1v_Output OUT;

  OUT.position = float4(position,0,1);

  OUT.color = float3(0,1,0);

 

  return OUT;    

}

3.        綁定語義詞可以放在函數聲明的後面,其形式爲:

<type> <identifier> (<parameter-list>) [:<binding-semantic]

{

<body>

}

如下代碼所示,頂點入口函數的聲明後帶有“ COLOR ”語義詞,表示該函數需要反饋一個顏色值,所以函數的返回類型爲 float4 ,函數體也必須以 return 語句結束。

 

float4 main_v(float4 position: POSITION,

       out float4 oposition : POSITION,

       uniform float4x4 modelViewProj):COLOR

{

       oposition = mul(modelViewProj,position);

      

       float4 ocolor = float4(1.0,0,0,0);

 

       return ocolor;      

}

4.        最後一種語義綁定的方法是,將綁定語義詞放在全局非靜態變量的聲明後面。其形式爲:

<type> <identifier> [:<binding-semantic>][=<initializer>];

  這種形式的結構很不緊湊,也不利於代碼的維護和閱讀,所以並不常見,不建議讀者使用。事實上,我在學習和研究過程中也很少碰到這種形式。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章