我在使用GLSL中的变量索引时遇到了一些麻烦.下面的GLSL代码在NVidia卡上运行良好.但它不适用于我的Intel HD 4000:
for(int i=0;i<int(uLightCount);++i)
{
vec3 lightPos = uLightsPos[i];
....
}
Run Code Online (Sandbox Code Playgroud)
没有着色器编译器错误.该程序只是崩溃了glUseProgram
我怎样才能解决这个问题?
编辑:
uLightCount
并且uLightsPos
是制服:
#define MAX_LIGHTS 10
uniform float uLightCount;
uniform vec3 uLightsPos[MAX_LIGHTS];
Run Code Online (Sandbox Code Playgroud)
编辑2:
我找到了一个奇怪的解决方法:
#define i0 0
#define i1 1
#define i2 2
...
for(int i=0;i<int(uLightCount);++i)
{
vec3 lightPos;
if (i==i0)
lightPos = uLightsPos[i0];
if (i==i1)
lightPos = uLightsPos[i1];
....
}
Run Code Online (Sandbox Code Playgroud)
知道为什么这个有用吗?
小智 3
索引必须是常数。这就是您的解决方法有效的原因。
所以不可能这样写
for(int i=0;i<10;++i)
{
result += uLightsPos[i];
}
Run Code Online (Sandbox Code Playgroud)