18
我”尝试开发iOS和OpenGL ES的一个基本的游戏,但我被困在这个问题上与制服,这里是该值传递给我的制服代码:glUniform4fv是给GL_INVALID_OPERATION
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);
请注意,在调用glDrawArrays之前,已经注意将glUniform函数放在glUseProgram之前。统一的位置看起来也很好,通过跟踪确认。这里是我所得到的,当我在XCode中运行的OpenGL ES分析工具:
它返回一个glUniform4fv GL_INVALID_OPERATION,注意代表的价值观似乎是正确的。
下面是对GL_INVALID_OPERATION错误我从documentation发现可能的原因:
- 没有当前程序对象。
- 着色器中声明的统一变量的大小与glUniform命令指示的大小不匹配。
- 此函数的有符号或无符号整数变体之一用于加载类型为float,vec2,vec3,vec4或其数组的统一变量,或者如果此函数的浮点变体之一是用于加载类型为int,ivec2,ivec3,ivec4,unsigned int,uvec2,uvec3,uvec4或这些数组的一个统一变量。
- 此函数的有符号整数变体之一用于加载类型为unsigned int,uvec2,uvec3,uvec4或其数组的统一变量。
- 此函数的一个无符号整数变体用于加载类型为int,ivec2,ivec3,ivec4的统一变量或这些类型的数组。
- 位置是当前程序对象的无效统一位置,位置不等于-1。
- count大于1,并且指示的统一变量不是数组变量。
- 使用glUniform1i和glUniform1iv以外的命令加载采样器。
他们似乎都没有解释为什么我听到这个错误。这让我疯狂,请帮忙!
从列表中我可以想到的唯一原因是第2和第3点。所以在着色器中真正声明为'vec4'的对应统一变量(可能是'vec3')?否则,+1用于广泛分析(尽管如此,着色器代码也会很好)。 –
你明白了!我在前一段时间修改之后忽略了统一维度,在我将centerPosition值更改为vec4后,我的统一vec3 ucenterp被修改为vec4后,错误消失了:)非常感谢您的帮助。干杯 – Pupillam
@ChristianRau我认为他希望你添加你的评论作为答案;) – 2013-02-07 14:30:07