【问题标题】:OpenGL shader error C1068:Too much data in type constructorOpenGL 着色器错误 C1068:类型构造函数中的数据过多
【发布时间】:2017-05-07 03:08:11
【问题描述】:

我正在关注这个网站 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 类的一个方法,它只是使用了上述的shader 程序。

当我注释掉我的统一变量和 ourShader.use() 之后的两行时,OpenGL 渲染一切都很好。但是当我尝试添加一个统一变量时,着色器编译器抱怨类型构造函数中的数据太多。我网上搜了一下,没找到有用的,如果重复的话,告诉我,我会删帖的。

【问题讨论】:

    标签: c++ opengl shader


    【解决方案1】:

    错误信息很清楚:您将参数传递给无效的构造函数。在这种特定情况下,您尝试将 vec4 changeColor 和额外的 float 传递给 vec4 构造函数(这意味着您传递 5 个浮点数):

    vec4(changeColor, 1.0f);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多