CGprofile
什么是CGprofile
一个 Cg profile定义了一个“被特定图形硬件或API所支持的Cg语言子集”,任意一种shader language都是基于可编程图形硬件的(寄存器、指令集等),这也就意味着:不同的图形硬件对应着不同的功能子集。这些可选的语言功能包括某些控制结构和标准函数库。profile还定义了数据类型的精度,并且指定数据类型是否全部或仅部分支持。profile按住功能可以划分为顶点profile和片段profile,而顶点profile和片段profile又基于opengl和directx的不同版本或扩展,划分为各种版本。从某种意义上而言,opengl和dirextx的发展历程成就了cg语言。
数组在Cg语言中是第一数据类型,那是因为Cg不支持指针。
函数参数是使用值传递。
有些硬件不支持for循环,有些支持loop
Profile在英文中的意思是“侧面、轮廓”, 文献[1]第三页写到:A Cg profile defines a subset of the full Cg language that is supported on a particular hardware platform or API(CgUsersManual 21页)。
即一个Cg profile定义了一个“被特定图形硬件或API所支持的Cg语言子集”,从前面的分析我们可以知道,任意一种shader language都是基于可编程图形硬件的(寄存器、指令集等),这也就意味着:不同的图形硬件对应着不同的功能子集。Profile按照功能可以划分为顶点Profile和片断Profile,而顶点profile和片段profile又基于OpenGL和DirectX的不同版本或扩展,划分为各种版本。从某种意义上而言,OpenGL和DirectX的发展历程成就了Cg语言。
C语言和CG不同的地方
- CG有bool
- CG没有指针,所以用数组
- 使用in,out输入输出
C语言有CG没有
- CG有时候不支持for和while
- CG不支持goto,switch,case,标签也不支持
- CG不支持指针
- 支持数组,但是大小和维数有限制
- CG的所有整形都是有符号的
C语言没有CG有的特性
- 有类似COLOR0,POSITION这种的语义
- 内建swizzle操作符,让使用更顺滑
- CG的主要数据类型是float,fixed和half
- 可以基于向量元素操作
?:
,||,&&都可以和bool向量一起使用- 函数的形参有默认值
- 可以注释