目录
1.基本数据类型
1.float: 32位浮点数据,被所有profile支持
2.half: 16位浮点数据
3.int: 32位整型数据,有些profile将int作为float使用
4.fixed: 12位定点数,被所有profile支持
5.bool: 被所有profile支持
6.sampler* : 纹理对象句柄,有sampler,sampler1D,sampler2D,sampler3D,samplerCUBE和samplerRECT(DirectX profile不支持)
7.string: 不被profile支持,实际运用也少,可以通过Cg runtime API声明,赋值,保存Cg文件信息
8.多元向量: 如float2,float4,bool4等,但不能超过四维
9.矩阵: 如float1x1,float3x3等,不能超过4x4
注意:
Cg
中向量、矩阵与数组是完全不同,向量和矩阵是内置的数据类型
(矩阵基于向量),而数组则是一种数据结构,不是内置数据类型!这一点和
C\C++
中不太一样,在
C\C++
中,这三者同属于数据结构,数组可以构建向量和
矩阵。
2.数组类型
-在着色程序中,数组通常作为外部应用程序传入大量参数到Cg的顶点程序中的形参接口
1.数组声明:
如float a[10], float4 b[2], float c[2] = {1,4}, float d[2][3]
2.数组长度: " .length "获取,如 a.length
数组和矩阵有些类似,但是并不是相同。 例如
4*4
阶数组的的声明方式为:
float M[4][4];4
阶矩阵的声明方式为:
float4x4 M
。前者是一个数据结构,包含
16
个
float
类型数据,后者是一个
4
阶矩阵数据。
float4x4 M[4]
,表示一个数组,包
含
4
个
4
阶矩阵数据。
进行数组变量声明时,一定要指定数组长度,除非是作为函数参数而声明的
形参数组。
3.结构类型struct
-例:
struct myAdd
{
float val;
float add(float x)
{
return val+x;
}
};
myAdd s;
s.value = 1;
-成员变量需要在成员函数前声明.
-成员函数是否可以重载依赖于profile版本
-通常Cg代码会在开头定义两个结构体,分别定义输入和输出,这两个结构体的定义还需要绑定语义类型,用来与宿主环境进行数据交换的作为识别.
-常见语义: POSITION位置,COLOR颜色,NORMAL法向量,Texcoord纹理坐标等
4.interfaces接口
-有提供,但还不完善,几乎不用
5.类型的转换
-强制转换
-隐式转换,
低精度转高精度
如:
float a = 1.0;
half b =2.0;
float c = a+b;//b会从half转到float
-有类型变量与无类型常量运算,常量不做转换
如:
float a = 2.0;
float b = a+ 2.0;//2.0编译时作为float
-后缀
如:2.0f,2.0h
-f: float
-h: half
-x: fixed
资料来源: <GPU编程与CG语言之阳春白雪下里巴人>