Opengl 在GLSL中设置矩阵不起作用
我有以下着色器代码(GLSL):Opengl 在GLSL中设置矩阵不起作用,opengl,glsl,Opengl,Glsl,我有以下着色器代码(GLSL): #版本420 in vec4 vertex; uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; void main() { gl_Position = modelViewMatrix * projectionMatrix * vertex; } 如果我没有设置modelViewMatrix和projectionMatrix,那么它运行时不会出错。如果我这样做,当我尝试绘制时
#版本420
in vec4 vertex;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
void main()
{
gl_Position = modelViewMatrix * projectionMatrix * vertex;
}
如果我没有设置modelViewMatrix和projectionMatrix,那么它运行时不会出错。如果我这样做,当我尝试绘制时,OpenGL会抛出一个无效的操作异常
我通过以下代码设置矩阵:
glUniformMatrix4fv(位置,1,假,sendArray)代码>
我已验证“location”和“sendArray”包含正确的数据。这是怎么回事
编辑:问题似乎出在glUniformMatrix4fv调用中,但我不知道它出了什么问题
设置位置的代码如下:
闪烁定位
GLint location = glGetUniformLocation(this->programID, uniform.c_str());
if (location == -1)
{
throw ShaderVariableNotFoundException(uniform, this->programID);
}
您正在传递计数的16
,这是错误的
发件人:
count
参数表示要传递的矩阵数。如果修改单个矩阵的值,则应使用计数
为1,大于1的计数
可用于修改矩阵数组
根据,您将得到预期的错误
如果计数
大于1且指示的统一变量不是数组变量,则生成GL\u无效\u操作
文档的注释部分再次告诉您
如果count
大于1且指示的统一变量不是数组,则会生成GL\u INVALID\u操作
错误,并且指定的统一变量将保持不变
我修好了,但我不愿意告诉你所有的解决方案,因为这是多么尴尬
我
我忘了绑定着色器程序
非常抱歉浪费了您所有的时间。我无法设置GLSL中未使用的值,因为编译器会优化变量。如果我试图设置一个未在着色器中使用的值,OpenGL会告诉我它找不到该变量。显示设置位置的代码。
。我检查以确保位置有效。它不是-1或任何东西。显示整个代码。你会吗?我现在在原来的帖子上展示了设置位置的代码,如果这就是你所说的“全部”代码的意思的话。我更改了它,但不幸的是,这并没有消除错误。我还感到困惑,因为我认为这是元素的数量:|但由于您的帮助,我现在认识到问题出在glUniformMatrix4fv函数中!哈哈哈哦不。。。原来这也是我的问题!谢谢你回来并添加这个。