Pup*_*lam 18 iphone shader opengl-es ios
我试图在iOS和OpenGL ES中开发一个基本游戏,但是我在制服上遇到了这个问题,这里是将值传递给我的制服的代码:
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);
Run Code Online (Sandbox Code Playgroud)
请注意,在glDseProgram之前和glDrawArrays调用之前,已经注意定位glUniform函数.通过追踪确认均匀位置也很好.以下是我在XCode中运行OpenGL ES Analyzer工具时得到的结果:

它为glUniform4fv返回GL_INVALID_OPERATION,注意表示的值似乎是正确的.
以下是我从文档中找到的GL_INVALID_OPERATION错误的可能原因:
他们似乎没有解释为什么我收到这个错误.它让我发疯,请帮忙!
添加我的评论作为答案,因为它原来是解决方案:
我能想象的唯一原因是第2点和第3点:
- 着色器中声明的统一变量的大小与glUniform命令指示的大小不匹配.
- 此函数的有符号或无符号整数变量之一用于加载float,vec2,vec3,vec4或其数组的统一变量,或者如果使用此函数的某个浮点变量加载int,ivec2,ivec3,ivec4,unsigned int,uvec2,uvec3,uvec4或其数组的统一变量.
因此,请确保相应的统一变量确实vec4在着色器中声明(可能是一个vec3?).
| 归档时间: |
|
| 查看次数: |
4180 次 |
| 最近记录: |