结构体
着色语言还提供了类似于 C 语言中的用户自定义结构体,同样也是使用struct关键字进行声明,基本用法如下所示:
struct info {
vec3 color;
vec3 postion;
vec3 textureCoor;
};
声明了info
类型的结构体之后,就可以像使用内建数据类型一样使用这个用户自定义类型了,如:
info CubeInfo; //声明了一个 info 类型的变量 CubeInfo
对于结构体来说,其他的使用方法都与 C 语言基本类似,这里就不再累述了,需要的读者可以查阅参考 C 语言结构体部分的相关知识。
数组
从前面对向量的介绍中应该能够感觉到,着色语言应该支持自定义数组的,实际情况也确实如此。声明数组的方式主要有两种,具体情况如下所示:
(1)声明数组的同时,指定数组的大小。
vec3 postion[20]; //声明了一个包含20个vec3的数组,索引从0开始
(2) 在声明数组并初始化的同时,可以不指定数组的大小。
float x[] = float[2](1.0, 2.0); //数组的长度为2
float y[] = float[](1.0 ,2,0, 3.0); //数组的长度为3
着色语言只支持一维数组,不支持二维数组。
空类型
空类型使用void
表示,仅用来声明不返回任何值的函数。例如在顶点着色器以及片元着色器中必须存在的 main 函数就是一个返回值为空类型的函数,代码如下所示:
void main() //声明一个空返回值类型的 main 方法
{/*函数的具体操作省略*/}