glUniform4fv给GL

我试图在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);

请注意,在调用glDrawArrays之前,已经注意将glUniform函数放在glUseProgram前面。 统一的位置看起来也很好,通过跟踪确认。 以下是我在XCode中运行OpenGL ES分析器工具时得到的结果:

在这里输入图像描述

它为glUniform4fv返回一个GL_INVALID_OPERATION,注意表示的值似乎是正确的。

以下是我从文档中找到的GL_INVALID_OPERATION错误的可能原因:

  • 没有当前的程序对象。
  • 在着色器中声明的统一变量的大小与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以外的命令加载采样器。
  • 他们似乎都没有解释为什么我收到这个错误。 这让我疯狂,请帮忙!


    添加我的评论作为答案,因为它原来是解决方案:

    从这张名单中我可以想到的唯一原因是第二点和第三点:

  • 在着色器中声明的统一变量的大小与glUniform命令指定的大小不匹配。
  • 使用此函数的有符号或无符号整数变体之一来加载类型为float,vec2,vec3,vec4或其数组的统一变量,或者如果使用此函数的浮点变体之一加载类型为int的整数变量,ivec2,ivec3,ivec4,unsigned int,uvec2,uvec3,uvec4或这些的数组。
  • 因此,确保相应的uniform变量在着色器中被真正声明为vec4 (也许它是vec3 ?)。

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

    上一篇: glUniform4fv is giving GL

    下一篇: Why not vec3 for OpenGL ES 2.0 gl