将glUniformMatrix与数组结合使用时的分段错误

时间:2015-03-05 08:46:13

标签: c++ opengl-3

当我使用glUniformMatrix4fv将矩阵传递给mat4制服时,我遇到了分段错误。

我的着色器看起来像这样:

#version 330 core

layout(location = 0) in vec3 pos;

layout(std140) uniform ModelMatrixBuffer {
    mat4 ModelMatrix[2];
};

out vec3 color;

uniform mat4 ViewProj;

void main() {
    gl_Position = ViewProj * ModelMatrix[0] * vec4(pos, 1.f);
    color = vec3(1,1,0);
}

我想将glm :: mat4传递给ViewProj。当我将ModelMatrix数组的大小更改为1时,它可以正常工作。像这样:

layout(std140) uniform ModelMatrixBuffer {
    mat4 ModelMatrix[1];
};

然后一切正常!

1 个答案:

答案 0 :(得分:0)

问题是用于glGetActiveUniform的索引与特定制服的实际位置不一致。

uniform int arr[3];
uniform int arr2[3];
uniform int i;

这里,索引将是0,1,2,因为glGetActiveUniform将只计算数组中的第一个元素,这里它将是arr[0]arr2[0]。但是,该位置将为数组中的每个元素递增。因此,我将拥有位置6而不是2。

我的错误是我有一张包含所有制服的地图,我正在保存索引而不是位置。因此,我试图将我的ViewProj矩阵放入ModelMatrix数组的第二个元素中。为什么这会以分段错误结束,我不知道。它们都是mat4。