c++ - OpenGL 着色器错误 C1068 :Too much data in type constructor

标签 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的一个方法,它只是简单地使用所述着色器程序。

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

最佳答案

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

vec4(changeColor, 1.0f);

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

关于c++ - OpenGL 着色器错误 C1068 :Too much data in type constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43824319/

相关文章:

ios - 自 iOS6 以来,GLKTexture 未正确映射

c++ - GLSL - GLSL 1.2 中的统一位置和着色器中的深度测试

swift - 使用 Swift 在 Mac OS 上进行 Metal 纹理映射

c++ - 在 segmentation 区间计算指数?

c++ - 通过引用修改单独函数中 Rcpp::List 的子部分

c++ - 为什么 boost::scoped_ptr 或 std::unique_ptr 不可复制?

opengl:将原点更改为左上角

c++ - 如何使用 Boost::Python 打印到 Python 终端

c++ - glStencil 能做什么?

c++ - 有没有办法在不破坏窗口/上下文的情况下切换全屏?