我尝试初始化结构中的数组,如下所示:
struct myStruct {
vec3 data[20] = vec3[20] (vec3(1, 1, 1), vec3( 1, -1, 1), vec3(-1, -1, 1), vec3(-1, 1, 1),
vec3(1, 1, -1), vec3( 1, -1, -1), vec3(-1, -1, -1), vec3(-1, 1, -1),
vec3(1, 1, 0), vec3( 1, -1, 0), vec3(-1, -1, 0), vec3(-1, 1, 0),
vec3(1, 0, 1), vec3(-1, 0, 1), vec3( 1, 0, -1), vec3(-1, 0, -1),
vec3(0, 1, 1), vec3( 0, -1, 1), vec3( 0, -1, -1), vec3( 0, 1, -1));
};
但是我收到了这个错误:
ERROR: 0:84: '=' : syntax error: syntax error
可以这样做吗?
答案 0 :(得分:3)
struct
启动类型规范而不是变量声明。您必须声明一个变量并使用结构构造函数(参见Data Type (GLSL) - Struct constructors):
struct myStruct {
vec3 data[20];
};
myStruct myVar = myStruct( vec3[20]( vec3(1, 1, 1), ..... ) );
见GLSL Specification - 4.1.8 Structures
用户定义的类型可以通过使用 struct 关键字将其他已定义的类型聚合到结构中来创建。例如,
struct keyword. For example, struct light { float intensity; vec3 position; } lightVar;
可以使用构造函数在声明时初始化结构,如第5.4.3节“结构”中所述 构造函数”
见GLSL Specification - 5.4.3 Structure Constructors
一旦定义了结构,并为其类型指定了名称,就可以使用与之相同的构造函数 构造该结构的实例。例如:
struct light { float intensity; vec3 position; }; light lightVar = light(3.0, vec3(1.0, 2.0, 3.0));