摘抄「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>];
這種形式的結構很不緊湊,也不利於代碼的維護和閱讀,因此並不常見,不建議讀者使用。事實上,我在學習和研究過程當中也不多碰到這種形式。