I’m getting some very bizarre behavior here. I’m loading and creating a shader program (that uses the Projection matrix in the vertex shader and sets the fragment’s color to magenta in the fragment shader) and glGetError() reports no errors after glUseProgram().
When I call glGetUniformLocation, it returns -1 yet glGetError() returns GL_NO_ERROR.
Yet still the magenta cube shows up.
Here’s my shader program creation code along with the code that attempts to set the uniform:
//Shader Program
GLuint shaderProgram = 0;
shaderProgram = glCreateProgram();
//Vertex shader
GLuint vertexShader = glCreateShader( GL_VERTEX_SHADER );
GLchar* vertexSource = load_shader( "vertex.glsl" );
const GLchar** vShaderSource = (const GLchar**)&vertexSource;
glShaderSource( vertexShader, 1, vShaderSource, NULL );
glCompileShader( vertexShader );
glAttachShader( shaderProgram, vertexShader );
delete[] vertexSource; vertexSource = NULL;
//Fragment shader
GLuint fragmentShader = glCreateShader( GL_FRAGMENT_SHADER );
GLchar* fragmentSource = load_shader( "fragment.glsl" );
const GLchar** fShaderSource = (const GLchar**)&fragmentSource;
glShaderSource( fragmentShader, 1, fShaderSource, NULL );
glCompileShader( fragmentShader );
glAttachShader( shaderProgram, fragmentShader );
delete[] fragmentSource; fragmentSource = NULL;
//Link and use program
glLinkProgram( shaderProgram );
glUseProgram( shaderProgram );
GLenum err = glGetError();
if( err != GL_NO_ERROR )
{
quit = true;
}
GLint uniform = glGetUniformLocation( shaderProgram, "test" );
std::cout << "Uniform: " << uniform << std::endl;
err = glGetError();
if( err != GL_NO_ERROR )
{
quit = true;
}
glUniform1f( uniform, 1.f );
Here’s vertex.glsl
uniform mat4 LProj;
uniform mat4 LMView;
uniform float test;
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
//Transforming The Vertex
//gl_Position = LProj * gl_Vertex;
}
Here’s fragment.glsl
uniform float test;
void main()
{
// Setting Each Pixel To Red
gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);
}
I’m on an ATI HD 5700. I’m starting to think it’s haunted.