将 glUniformMatrix 与数组结合使用时出现分段错误
segmentation fault when using glUniformMatrix in combination with an array
当我使用 glUniformMatrix4fv
将矩阵传递给 mat4 uniform 时出现分段错误。
我的着色器看起来像这样:
#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];
};
然后一切正常!
问题是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.
当我使用 glUniformMatrix4fv
将矩阵传递给 mat4 uniform 时出现分段错误。
我的着色器看起来像这样:
#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];
};
然后一切正常!
问题是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.