glGetUniformLocation()返回-1,但Uniform仍然有效

时间:2017-02-20 03:30:03

标签: c++ opengl glsl shader

我遇到了glGetUniformLocation()的问题。我试图在片段着色器中获取制服的位置,但每当我调用它时,该函数返回-1。

这是我的片段着色器:

#version 450
// The fragment shader acts on each pixel in a given polygon

in vec4 fragmentColor;

// color of the pixel
out vec4 color;

uniform float time;


void main(){
    color = fragmentColor + vec4(1.0 * (cos(time)+1.0) * 0.5,  
                                 1.0 * (cos(time + 2.0)+1.0) * 0.5,  
                                 1.0 * (sin(time + 1.0)+1.0) * 0.5, 0.0); // Set color

}

以下是我致电glGetUniformLocation()的地方:

GLuint GLSLProgram::getUniformLocation(const std::string uniformName){

    GLuint location = glGetUniformLocation(_programID, uniformName.c_str());

    if (location = GL_INVALID_INDEX){
        std::cout << (int)location << std::endl;
        fatalError("Error: Uniform '" + uniformName + "' not found in shader!");
    }
    return location;
}

在我的drawScreen函数中,我写道:

GLuint timeLocation = _colorProgram.getUniformLocation("time");

显然正在使用制服来计算颜色,因此GPU不应该对其进行优化。

但它变得更好。如果我将layout(location = 2)放在uniform float time前面,我现在可以使用glUniform1f(2, _time)来修改制服。

这是否意味着glGetUniformLocation()被打破了?或者我使用它错了?

0 个答案:

没有答案