Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ glGetUniformLocation()返回-1,但Uniform仍然有效_C++_Opengl_Glsl_Shader - Fatal编程技术网

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

C++ glGetUniformLocation()返回-1,但Uniform仍然有效,c++,opengl,glsl,shader,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

我一直在使用
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()
的地方:

很明显,均匀性是用来计算颜色的,所以GPU不应该对其进行优化

但情况会好转。如果我将
布局(位置=2)
放在
统一浮动时间
前面,我现在可以使用
glUniform1f(2,_时间)
修改统一浮动时间


这是否意味着
glGetUniformLocation()
已损坏?还是我用错了?

更有可能的是,您的代码中有一个bug。但是,由于您没有选择发布该代码,我们无法真正告诉您它是什么。我添加了该代码。如果(location==GL\u INVALID\u INDEX)感谢您,它成功了@泽菲克
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;
}
GLuint timeLocation = _colorProgram.getUniformLocation("time");