我有这个着色器代码(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(location, 1, false, sendArray);
的代码如下:
location
GLint location;
GLint location = glGetUniformLocation(this->programID, uniform.c_str());
if (location == -1)
{
throw ShaderVariableNotFoundException(uniform, this->programID);
}
答案 0 :(得分:8)
我修好了,但是我不愿意告诉你所有的解决方案,因为它有多尴尬......
...我
我忘了绑定着色器程序。
我很遗憾浪费你所有的时间。
答案 1 :(得分:4)
你正在通过16
来计算,这是错误的。
count
参数表示要传递的矩阵数。如果修改单个矩阵的值,则应使用count
为1,并且可以使用大于1的count
来修改矩阵数组。
根据
,你得到了预期的错误如果GL_INVALID_OPERATION
大于1且指示的统一变量不是数组变量,则会生成
count
。
文档的备注部分再次告诉您
如果
count
大于1并且指示的统一变量不是数组,则会生成GL_INVALID_OPERATION
错误,并且指定的统一变量将保持不变。