glUniform4fv is giving GL

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:

  • there is no current program object.
  • 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.
  • one of the signed integer variants of this function is used to load a uniform variable of type unsigned int, uvec2, uvec3, uvec4, or an array of these.
  • one of the unsigned integer variants of this function is used to load a uniform variable of type int, ivec2, ivec3, ivec4, or an array of these.
  • location is an invalid uniform location for the current program object and location is not equal to -1.
  • count is greater than 1 and the indicated uniform variable is not an array variable.
  • a sampler is loaded using a command other than glUniform1i and glUniform1iv.
  • 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 ?).

    链接地址: http://www.djcxy.com/p/33604.html

    上一篇: Android OpenGL ES 2.0多重纹理和相机

    下一篇: glUniform4fv给GL