OpenGL 着色器错误 C1068:类型构造函数中的数据过多

Uğu*_*URT 3 c++ opengl shader

我正在关注这个网站 www.learnopengl.com 上的教程,在着色器教程的最后,我尝试将我自己的统一变量添加到片段着色器,如下所示:

#version 330 core
in vec3 ourColor;

out vec4 color;
uniform vec4 changeColor;

void main()
{
    color = vec4(changeColor, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)

我像这样编译和更改统一变量:

ourShader.Use();
GLint fragColorUniformLocation = glGetUniformLocation(ourShader.Program, "changeColor");
glUniform4f(fragColorUniformLocation, 0.0f, 1.0f, 0.0f, 1.0f);
Run Code Online (Sandbox Code Playgroud)

ourShader.use()只是我们在教程中为Shader操作编写的Shader类的一个方法,它只是简单地使用了所述的着色器程序。

当我注释掉我的统一变量和 ourShader.use() 之后的两行时,OpenGL 渲染一切都很好。但是当我尝试添加一个统一变量时,着色器编译器抱怨类型构造函数中的数据太多。我在网上搜索找不到任何有用的东西,如果这是重复的,请告诉我,我将删除该帖子。

BDL*_*BDL 5

错误消息相当清楚:您将参数传递给无效的构造函数。在这种特定情况下,您尝试将 avec4 changeColor和 a 附加floatvec4构造函数(这意味着您传递 5 个浮点数):

vec4(changeColor, 1.0f);
Run Code Online (Sandbox Code Playgroud)

由于目前还不清楚您想要做什么(或为什么要将 1.0f 添加到 vec4),但是您必须更改changeColor为 avec3或删除1.0f.