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

时间:2017-05-06 19:02:13

标签: 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);
}

我编译并更改统一变量,如下所示:

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渲染一切正常。但是当我尝试添加一个统一变量时,着色器编译器抱怨类型构造函数中有太多数据。搜索网络,无法找到任何有用的东西,如果这是重复的,只需告诉我,我将删除该帖子。

1 个答案:

答案 0 :(得分:2)

错误消息相当明确:您将参数传递给无效的构造函数。在这种特定情况下,您尝试将vec4 changeColor和其他float传递给vec4构造函数(这意味着您传递了5个浮点数):

vec4(changeColor, 1.0f);

由于您不清楚自己想要做什么(或者为什么要将1.0f添加到vec4),但您必须将changeColor更改为vec3或删除{{ 1}}。