我遇到了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()
被打破了?或者我使用它错了?