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

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

語義綁定方法  ide

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

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

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

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

 

void mian_v(float4 position_obj : POSITION,io

           float3 normal_obj : NORMAL,form

 

           out float4 oPosition : POSITION,變量

           out float4 oColor  : COLOR,model

 

          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>];

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

相關文章
相關標籤/搜索