I' trying to develop a basic game in iOS and OpenGL ES but I'm stuck on this problem with the uniforms, here is the code that passes the value to my uniform:
glBindVertexArrayOES(_vertexArray);
// Render the object with ES2
glUseProgram(self.shaderProgram);
glUniformMatrix4fv(uniformModelViewProjection, 1, 0, modelViewProjectionMatrix.m);
// Get uniform center position
glUniform4fv(uniformCenterPosition, 1, centerPosition.v);
// Get uniform time position
glUniform1f(uniformTime, time);
// Set the sampler texture unit to 0
glUniform1i(uniformTexture, 0);
glDrawArrays(GL_POINTS, 0, numVertices);
Notice that care has been taken to position the glUniform function preceded with glUseProgram and before the glDrawArrays call is made. The uniform locations look fine also as confirmed via tracing. Here is what I get when I run the OpenGL ES Analyzer tool in XCode:
It returns a GL_INVALID_OPERATION for glUniform4fv, notice that the values represented seem to be correct.
Here are the possible causes for the GL_INVALID_OPERATION error I found from the documentation:
None of them seem to explain why the heck I am receiving this error. It's driving me crazy, please help!
Adding my comment as an answer, since it turned out to be the solution:
The only causes from that list that I could imagine are points 2 and 3:
- the size of the uniform variable declared in the shader does not match the size indicated by the glUniform command.
- one of the signed or unsigned integer variants of this function is used to load a uniform variable of type float, vec2, vec3, vec4, or an array of these, or if one of the floating-point variants of this function is used to load a uniform variable of type int, ivec2, ivec3, ivec4, unsigned int, uvec2, uvec3, uvec4, or an array of these.
So make sure that the corresponding uniform variable is really declared as vec4
in the shader (maybe it's a vec3
?).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With