4

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

#version 420

in vec4 vertex;

uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;

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

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

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

glUniformMatrix4fv(location, 1, false, sendArray); 我已经验证“location”和“sendArray”包含正确的数据。这里发生了什么?

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

要设置的代码location如下:

GLint location;

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

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

4

2 回答 2

11

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

一世...

我忘了绑定着色器程序。

我很抱歉浪费了你所有的时间。

于 2012-05-27T01:09:36.510 回答
4

您正在通过16计数,这是错误的。

文档中

count参数指示要传递的矩阵的数量。count如果修改单个矩阵的值,应使用 1 的A ,count大于 1 可用于修改矩阵数组。

你得到了预期的错误,每

GL_INVALID_OPERATION如果count大于 1 并且指示的统一变量不是数组变量,则生成。

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

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

于 2012-05-27T00:09:56.103 回答