输入寄存器和保持寄存器区别_《GPU编程与CG语言之阳春白雪下里巴人》- 第七章(输入\输出与语义绑定)...

fa84dadd15da45feb047f4f6f33bdb9a.png

第七章 输入输出与语义绑定

我们最大的弱点在于放弃。成功的必然之路就是不断的重来一次。
                 ------ 托马斯·爱迪生

第三章从 GPU 运行原理和数据流程的角度阐述了顶点着色程序和片段着色程序的输入输出,即,应用程序(宿主程序)将图元信息(顶点位置、法向量、纹理坐标等)传递顶点着色程序;顶点着色程序基于图元信息进行坐标空间转换,运算得到的数据传递到片段着色程序中;片段着色程序还可以接受从应用程序中传递的纹理信息,将这些信息综合起来计算每个片段的颜色值,最后将这些颜色输送到真缓冲区(或颜色缓冲区)中。
  这些是顶点着色程序和片段着色程序的基本功能和数据输入输出,实际上现在着色程序已经可以接受多种数据类型,并灵活的进行各种算法的处理,如,可以接受光源信息(光源位置、强度等)、材质信息(反射系数、折射系数等)、运动控制信息(纹理投影矩阵、顶点运动矩阵等),可以在顶点程序中计算光线的折射方向,并传递到片段程序中进行光照计算。
  这一章节中,我们将讲解 Cg 语言通过何种机制确定数据类型和传递形式。读者要抱着如下几个问题阅读本章节:
  1. 从应用程序传递到 GPU 的数据,分为图元信息数据(在 GPU 处理的基本数据如顶点位置信息等)和其他的离散数据(在 GPU 运行流程中不会发生变化,如材质对光的反射、折射信息),这两种输入数据如何区分?
  2. 从应用程序传递到 GPU 中的图元信息如何区分类型,即,顶点程序怎么知道一个数据是位置数据,而不是法向量数据?
  3. 顶点着色程序与片段着色程序之间的数据传递如何进行?

7.1 Cg 关键字

关键字是语言本身所保留的一个字符串集合,用于代表特定的含义,如前面所讲到的数据类型关键字 int 、float 等,以及结构体关键字 struct。 Cg 中的关键字很多都是照搬 CC++ 中的关键字,不过 Cg 中也创造了一系列独特的关键字,这些关键字不但用于指定输入图元的数据含义(是位置信息,还是法向量信息),本质也则对应着这些图元数据存放的硬件资源(寄存器或者纹理),称之为语义词(Semantics),通常也根据其用法称之为绑定语义词(binding semantics)。
  除语义词外,Cg 中还提供了三个关键字,in、out、inout,用于表示函数的输入参数的传递方式,称为输入输出关键字,这组关键字可以和语义词合用表达硬件上不同的存储位置,即同一个语义词,使用 in 关键字修饰和 out 关键词修饰,表示的图形硬件上不同的寄存器。
  Cg 语言还提供两个修饰符:uniform,用于指定变量的数据初始化方式;const 关键字的含义与 CC++ 中相同,表示被修饰变量为常量变量。
  下面将分别对上述的关键字进行详细阐述。这一章非常关键,尤其是语义词的使用方法和含义,再小的 Cg 程序都需要使用到语义词。

7.2 uniform

Cg 语言输入数据流分为两类(参见文献【3】 Program Inputs and Ooutputs):   1. Varying inputs, 即数据流输入图元信息的各种组成要素。从应用程序输入到 GPU 的数据除了顶点位置数据,还有顶点的法向量数据,纹理坐标数据等。Cg 语言提供了一组语义词,用以表明参数是由顶点的哪些数据初始化的。   2. Uniform inputs,表示一些与三维渲染有关的离散信息数据,这些数据通常由应用程序传入,并通常不会随着图元信息的变化而变化,如材质对光的反射信息、运动矩阵等。Uniform 修饰一个参数,表示该参数的值由外部应用程序初始化并传入;例如在参数列表中写:

uniform float brightness,   
uniform float4x4 modelWorldProjec
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值