>我在这里看到了类似的问题,但它似乎并不能解决我的问题。
我有一堆结构,它们是聚合的。
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;
};