[Cg -C for graphic]输入\输出与语义绑定

目录

1.Cg关键字

2.uniform

3.const:

4.输入\输出修饰符 in\out\inout

 5.语义词与语义绑定

        1.输入与输出语义区别:

        2.顶点着色器的输入语义

        3.顶点着色器输出语义

         4.片段程序输出语义

        5.语义绑定


1.Cg关键字

        -如int,float,struct等照搬c\c++的关键字

        -语义词semantics : 1.用于指定输入图元的数据含义(位置,法向量...)

                                       2.本质对应图元数据存放的硬件资源(寄存器,纹理...)

                                       3.通常可根据其用法称之为绑定语义词 binding semantics

                                       4.语义词使用很关键,再小的Cg程序都要用到语义词

-表示函数输入参数的传递方式的关键字: in, out, inout. 称为输入\输出关键字.

这组关键词可以和语义词合用,表达硬件上不同的存储位置.即同一个语义词,用in或out修饰,表示图形硬件上不同的寄存器

        -uniform: 用于指定变量的数据初始化方式

        -const : 被修饰的变量为常量变量

2.uniform

Cg语言将输入数据流分为两类:

        1.varying inputs,数据流输入图元信息的各种组成要素.如应用程序向GPU输入的顶点位置,法线向量,纹理坐标等.

        2.uniform inputs, 一些与三维渲染有关的离散数据信息.由应用程序输入,通常不会随图形信息变化,如材质对光的反射信息,运动矩阵等.uniform修饰一个参数,表示该参数的值由外部应用程序初始化并输入,如uniform float brightness,表示从外部传入一个float类型数据.用uniform修饰,除了表示数据变量来源不同以外,与其他变量没有差异.

        常用uniform修饰函数形参,不能修饰局部变量.

3.const:

        -同c\c++,初始化了后就不能再修改值.

        -uniform与const修饰不冲突,可以用一个,可以都不用,可以都用.

4.输入\输出修饰符 in\out\inout

        -Cg中用不同是输入\输出修饰符,来区别值传递与引用传递(类比于形参,指针).

        1.in:修饰一个形参只用于输入,进入函数体时被初始化,形参不影响实参,类比如不同的值传递.

        2.out;修饰一个形参只用于输出,进入函数体时并没有被初始化,一般表示一个函数运行的结果.

        3.inout:修饰一个形参既用于输入也用于输出,类比于引用传递.

 5.语义词与语义绑定

        1.输入与输出语义区别:

        根据输入语义,图形处理器从某个寄存器取数据;将处理好的数据根据输出语义,放到指定的寄存器.语义是两个处理阶段(顶点阶段,片元阶段)之间输入\输出数据和寄存器之间的桥梁.语义通常也表示数据的含义,如POSITION表示参数存放数据是顶点的位置.

        语义只对两个处理阶段的输入\输出数据有意义(函数入口),在内部函数无效.

        虽然一些参数会使用命名相同的语义,但如POSITION,在输入语义表示应用程序传入的顶点位置,对于输出而言,表示要反馈给光栅器的裁剪空间位置.两者对应不同寄存器.

        2.顶点着色器的输入语义

        被所有profile支持的语义

         顶点坐标和法向量为三维,但通常用四维表示,又称齐次坐标.向量为0,点为1.

        3.顶点着色器输出语义

        顶点程序输出数据被传入片段程序,所以顶点程序输出语义通常是片段程序输入语义,当然页由例外,如POSITION.

        顶点程序必须声明一个输出变量并绑定POSITION语义,该变量中的数据将仅被用于光栅化.

         4.片段程序输出语义

        片段程序必须声明一个out向量,绑定语义COLOR,作为该片段最终颜色.

        一些片段程序支持输出语义DEPTH,与之绑定的变量会设置片段的深度值.还有一些支持额外颜色输出,用于多渲染目标.

        5.语义绑定

        语义绑定放在参数后,用冒号分开,如 float4 pos : POSITION.

        通常格式:

                -作为函数的参数:[const][in\out\inout]<type><identifier> : <binding-semantic>,const,in\out\inout作为可选项.

                -放在结构体

                struct <struct-tag>

                {

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

                };

                 -放在函数声明后

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

                {

                }

 

 

 

 

资料来源: <GPU编程与CG语言之阳春白雪下里巴人>第七章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值