我正在按照本网站 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/