我正在关注本网站www.learnopengl.com上的教程,在着色器教程结束时,我尝试将自己的统一变量添加到片段着色器中,如下所示:
#version 330 core
in vec3 ourColor;
out vec4 color;
uniform vec4 changeColor;
void main()
{
color = vec4(changeColor, 1.0f);
}
我编译并更改统一变量,如下所示:
ourShader.Use();
GLint fragColorUniformLocation = glGetUniformLocation(ourShader.Program, "changeColor");
glUniform4f(fragColorUniformLocation, 0.0f, 1.0f, 0.0f, 1.0f);
ourShader.use()只是我们在教程中为Shader操作编写的类Shader的方法,它只是使用了所述着色器程序。
当我将我的统一变量和myShader.use()之后的两行注释掉时,OpenGL渲染一切正常。但是当我尝试添加一个统一变量时,着色器编译器抱怨类型构造函数中有太多数据。搜索网络,无法找到任何有用的东西,如果这是重复的,只需告诉我,我将删除该帖子。
答案 0 :(得分:2)
错误消息相当明确:您将参数传递给无效的构造函数。在这种特定情况下,您尝试将vec4 changeColor
和其他float
传递给vec4
构造函数(这意味着您传递了5个浮点数):
vec4(changeColor, 1.0f);
由于您不清楚自己想要做什么(或者为什么要将1.0f添加到vec4),但您必须将changeColor
更改为vec3
或删除{{ 1}}。