我在片段着色器中定义了struct
,如下所示:
struct light_source{
vec4 Ld, location;
int type;
float radii, specular_exponent;
};
我正在使用此uniform
来访问结构成员:
uniform light_source light_sources[5];
现在,从我的C ++代码中,我得到了这样的统一位置:
Ld = glGetUniformLocation(Globals::ProgramId, "light_sources[0].Ld");
Ls = glGetUniformLocation(Globals::ProgramId, "light_sources[0].Ls");
location = glGetUniformLocation(Globals::ProgramId, "light_sources[0].location");
type = glGetUniformLocation(Globals::ProgramId, "light_sources[0].type");
radii = glGetUniformLocation(Globals::ProgramId, "light_sources[0].radii");
specular_exponent = glGetUniformLocation(Globals::ProgramId, "light_sources[0].specular_exponent");
当我打印上述值时,我发现值为-1,1,2,-1,3,4。因此,我无法获取Ld
和type
的位置。同样,如果我现在向着色器添加一个新变量,有时我会获得该位置,有时我会得到-1。
我在这里没有遇到问题。所有变量定义都是正确的,没有拼写错误。可以纠正这种行为吗?
答案 0 :(得分:3)
如果未使用统一/属性或对输出没有影响,则编译器/链接器可以完全删除它,这会导致getUniformLocation和glGetAttributeLocation返回无效值。