在 glsl opengl 中将嵌套结构数组作为统一传递



>我在这里看到了类似的问题,但它似乎并不能解决我的问题。

我有一堆结构,它们是聚合的。

struct Lambert {
vec3 albedo;
};
struct Metal {
vec3 albedo;
float roughness;
};
struct Dielectric {
float ref_idx;
};
struct Material {
int type; // 0: lambert, 1: metal, 2: dielectric;
Lambert lam;
Metal met;
Dielectric die;
};
struct Sphere {
vec3 center;
float radius;
Material mat_ptr;
};
struct Material {
int type; // 0: lambert, 1: metal, 2: dielectric;
Lambert lam;
Metal met;
Dielectric die;
};
struct Sphere {
vec3 center;
float radius;
Material mat_ptr;
};
struct Hittable {
int type; // 0 sphere, 1, other
Sphere sp;
};
uniform Hittable hittables[20];

我正在尝试将价值传递给制服。 我尝试将值传递给每个单独的组件,但是出现以下类型的错误:


1282: state is not legal for given parameters | weekend.cpp (96)
Shader program can not find the uniform location for hittables[2].type
1282: state is not legal for given parameters | weekend.cpp (164)
Shader program can not find the uniform location for hittables[2].sp.center
1282: state is not legal for given parameters | weekend.cpp (143)
Shader program can not find the uniform location for hittables[2].sp.radius
1282: state is not legal for given parameters | weekend.cpp (146)
Shader program can not find the uniform location for hittables[2].sp.mat_ptr.type
1282: state is not legal for given parameters | weekend.cpp (124)
Shader program can not find the uniform location for hittables[2].sp.mat_ptr.lam.albedo

我应该使用不同的策略将值传递给这些结构吗?有什么想法吗?

提前致谢

不是最优雅的解决方案,但我决定做一个大的平面结构,然后在着色器中解析它。

基本上我改变了上面的uniform Hittable hittables[20];uniform NHittable hittables[20];NHittable定义为

struct NHittable {
int hittable_type;
vec3 sphere_center;
float sphere_radius;
int material_type; // 0: lambert, 1: metal, 2: dielectric;
vec3 lambert_albedo;
vec3 metal_albedo;
float metal_roughness;
float dielectric_ref_idx;
};

最新更新