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");