如何在struct GLSL中初始化数组

the*_*woz 2 shader glsl

我尝试在结构中初始化一个数组,如下所示:

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));

};
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

ERROR: 0:84: '=' : syntax error: syntax error
Run Code Online (Sandbox Code Playgroud)

有可能这样做吗?

Rab*_*d76 5

struct开始一个类型规范而不是一个变量声明。您必须声明一个变量并使用结构构造函数(请参阅数据类型 (GLSL) - 结构构造函数):

struct myStruct {
    vec3 data[20];
};

myStruct myVar = myStruct( vec3[20]( vec3(1, 1,  1), ..... ) );
Run Code Online (Sandbox Code Playgroud)


请参阅GLSL 规范 - 4.1.8 结构

可以通过使用struct关键字将其他已定义的类型聚合到一个结构中来创建用户定义的类型。例如,

struct keyword. For example,
    struct light {
    float intensity;
    vec3 position;
} lightVar;
Run Code Online (Sandbox Code Playgroud)

可以在声明时使用构造函数初始化结构,如第 5.4.3 节“结构构造函数”中所述


请参阅GLSL 规范 - 5.4.3 结构构造函数

一旦定义了结构并为其类型指定了名称,就可以使用具有相同名称的构造函数来构造该结构的实例。例如:

struct light {
    float intensity;
    vec3 position;
};
light lightVar = light(3.0, vec3(1.0, 2.0, 3.0));
Run Code Online (Sandbox Code Playgroud)