结构体

GLSL ES 中可以使用 struct关键字定义结构体,将已存在的数据类型聚合到一起,如下:

  1. //定义结构体类型light

  2. struct light {

  3. vec4 color;

  4. vec3 position;

  5. };

  6. light l1, l2;

上面定义了结构体类型 light ,包含color和position两个成员变量。为了书写方便,可以在同一条语句中定义结构体并声明该类型的变量,如下:

  1. //定义结构体类型light

  2. struct light {

  3. vec4 color;

  4. vec3 position;

  5. } l1;

赋值和构造

结构体有标准的构造函数,名称与结构体名一致,其次构造函数的参数顺序必须与定义的成员变量顺序一致。

  1. // -------colo------- -----position-----

  2. l1 = light(vec4(0.0, 1.0, 0.0, 1), vec3(8.0, 2.0, 0.0));

访问成员

在结构体变量后面跟点运算符(.),然后再加上成员名就可以访问变量成员,如下:

  1. vec4 color = l1.color;

  2. vec3 position = l1.position;

运算符

结构体成员可以参与其自身类型支持的任何运算,但结构体本身只支持两种运算:

  • 赋值(=)

  • 比较(== 和 !=)

当且仅当两个结构体变量所对应的成员都相等时,== 运算符返回true,如果任意某个成员不相等,那么 != 运算符返回true。

还需要注意的是,赋值和比较运算不适用于含有 数组与 纹理成员的结构体。