摘抄“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>];
这种形式的结构很不紧凑,也不利于代码的维护和阅读,因此并不常见,不建议读者使用。事实上,我在学习和研究过程当中也不多碰到这种形式。