我的着色器中有一个统一块的数组,定义如下:
layout (std140) uniform LightSourceBlock
{
int shadowMapID;
int type;
vec3 position;
vec4 color;
float dist;
vec3 direction;
float cutoffOuter;
float cutoffInner;
float attenuation;
} LightSources[12];
为了能够将缓冲区对象绑定到每个光源上,我将每个uniform绑定到一个统一块索引:
for(unsigned int i=0;i<12;i++)
glUniformBlockBinding(program,locLightSourceBlock[i],i); // locLightSourceBlock contains the locations of each element in LightSources[]
在渲染时,我使用以下代码将我的缓冲区绑定到相应的索引上:
glBindBufferBase(GL_UNIFORM_BUFFER,i,buffer);
这很好,只要我绑定单个缓冲到绑定索引0。一旦有更多的,所有东西都是漆黑的(即使使用完全不同的着色器)。 (glGetError没有返回任何错误)
如果我将块索引范围从0-11更改为2-13(跳过索引1),则一切正常工作。我想,如果我使用索引1,我正在覆盖某些内容,但是我的着色器中没有其他统一块,并且我没有在我的代码中使用glUniformBlockBinding或glBindBufferBase,所以我不确定。
什么可能导致这种行为?索引1保留用于某些内容吗?