【发布时间】:2014-02-23 11:18:22
【问题描述】:
我正在尝试让简单的着色器工作。更具体地说,我正在尝试设置着色器的统一值。如果我消除了统一值,着色器将成功编译并正常工作。这是(顶点)着色器代码:
#version 440 core
layout(location = 0) in vec3 vertex;
uniform mat4 mvp;
void main()
{
gl_Position = mvp * vec4(vertex, 1);
}
以及我用来设置值的代码(glGetUniformLocation 按预期返回 0):
mvp = glm::mat4(
glm::vec4(3.0f, 0.0f, 0.0f, 0.0f),
glm::vec4(0.0f, 1.0f, 0.0f, 0.0f),
glm::vec4(0.0f, 0.0f, 1.0f, 0.0f),
glm::vec4(0.0f, 0.0f, 0.0f, 2.0f)
);
GLuint matrix = glGetUniformLocation(program, "mvp");
glUniformMatrix4fv(matrix, 1, GL_FALSE, glm::value_ptr(mvp));
问题是它似乎根本没有设置值。如果我使用glGetUniformfv 查询制服的值,它会返回默认值(不是我刚刚设置的那个),并且根本不会显示几何图形(但这只是结果,这不是问题所在)。
如果我在着色器中对制服的值进行硬编码,应用程序会正确显示几何图形,并且当要求输入值时(再次使用 glGetUniformfv),它会返回正确的值。
#version 440 core
layout(location = 0) in vec3 vertex;
uniform mat4 mvp = mat4(
vec4(1.0f, 0.0f, 0.0f, 0.0f),
vec4(0.0f, 1.0f, 0.0f, 0.0f),
vec4(0.0f, 0.0f, 1.0f, 0.0f),
vec4(0.0f, 0.0f, 0.0f, 2.0f)
);
void main()
{
gl_Position = mvp * vec4(vertex, 1);
}
知道为什么会这样吗?我使用的是 OpenGL 4.4,但我尝试了许多不同的版本,结果相同。
【问题讨论】: