在GLSL中设置矩阵不起作用

时间:2012-05-27 00:05:25

标签: opengl glsl

我有这个着色器代码(GLSL):

#version 420

in vec4 vertex;

uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;

void main()
{
    gl_Position = modelViewMatrix * projectionMatrix * vertex;
}

in vec4 vertex; uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; void main() { gl_Position = modelViewMatrix * projectionMatrix * vertex; }

如果我没有设置modelViewMatrix和projectionMatrix,它运行时没有错误。如果我这样做,当我尝试绘制时,OpenGL会抛出一个无效操作异常。

我通过以下代码设置矩阵:

我已经验证“location”和“sendArray”包含正确的数据。这是怎么回事?

编辑:问题似乎出现在glUniformMatrix4fv调用中,但我不知道它有什么问题。

设置 glUniformMatrix4fv(location, 1, false, sendArray);的代码如下:

location

GLint location;

GLint location = glGetUniformLocation(this->programID, uniform.c_str());

if (location == -1)
{
    throw ShaderVariableNotFoundException(uniform, this->programID);
}

2 个答案:

答案 0 :(得分:8)

我修好了,但是我不愿意告诉你所有的解决方案,因为它有多尴尬......

...我

我忘了绑定着色器程序。

我很遗憾浪费你所有的时间。

答案 1 :(得分:4)

你正在通过16来计算,这是错误的。

来自the documentation

  

count参数表示要传递的矩阵数。如果修改单个矩阵的值,则应使用count为1,并且可以使用大于1的count来修改矩阵数组。

根据

,你得到了预期的错误
  如果GL_INVALID_OPERATION大于1且指示的统一变量不是数组变量,则会生成

count

文档的备注部分再次告诉您

  

如果count大于1并且指示的统一变量不是数组,则会生成GL_INVALID_OPERATION错误,并且指定的统一变量将保持不变。