【发布时间】:2014-10-22 23:39:13
【问题描述】:
我在片段着色器中定义了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。
我不明白这里的问题。所有变量定义都是正确的,没有错别字。这种行为可以纠正吗?
【问题讨论】:
-
你在用吗?如果这些值没有被使用,那么它们可能会被优化
-
@ratchetfreak 谢谢!早些时候,我也为此添加了一些虚拟用法。就像将 light_sources[0].Ld 分配给某个新变量一样。但是这个新变量也没有在任何地方使用(因为它只是一个虚拟赋值)。现在我为变量添加了一个正确的用法,我得到了位置。非常感谢!