C语言 glGetUniform 返回 -1 表示活动制服



我有这个代码调用glGetUniform位置,但它返回-1,即使我在顶点着色器中使用制服。我没有收到来自glGetErrorglGetProgramInfoLogglGetShaderInfoLog的任何错误,着色器/程序都已成功创建。我也只在编译和链接后调用它。

int projectionUniform = glGetUniformLocation( shaderProgram, "dfProjection" );

#version 410
uniform float   dfRealTime;
uniform float   dfGameTime;
uniform mat4    dfProjection;
uniform mat4    dfModelView;
layout(location = 0) in vec3 vertPosition;
layout(location = 1) in vec4 vertColor;
smooth out vec4 color;
out vec4 position;
void main() {
    color = vertColor;
    position = (dfModelView * dfProjection) * vec4(vertPosition, 1.0);
}

这是片段着色器:

smooth in vec4 color;
out vec4 fragColor;
void main() {
    fragColor = color;
}

有三个正态:

  • 您在glGetUniformLocation中拼错了dfProjection,但似乎并非如此。
  • 在使用 glUseProgram 调用glGetUniformLocation之前,您没有绑定正确的程序。
  • 或者您没有在片段着色器中使用position,这意味着dfProjection并不真正活跃。

代码中的另一件事似乎是您正在传递着色器句柄,glGetUniformLocation您应该传递链接程序句柄。

编辑后,您没有在片段着色器中使用位置,

smooth in vec4 color;
out vec4 fragColor;
in vec4 position;
void main() {
    // do sth with position here
    fragColor = color*position;
}

请记住,您仍然需要使用gl_Position以便片段着色器知道最终的片段位置。但我回答的是为什么没有检测到均匀变量的问题。

最新更新