我在尝试创建和链接GLSL程序时遇到了错误。每当我尝试链接程序时,都会遇到错误。
输出:
错误:" void main()"的定义找不到
顶点着色器:
#version 330 core
layout(location = 0) in vec3 vertex_modelspace;
void main()
{
gl_Position.xyz = vertex_modelspace;
gl_Position.w = 1.0;
}
片段着色器:
#version 330 core
out vec3 color;
void main()
{
color = vec3(1, 0, 0);
}
着色器程序创建代码:
ifstream vertStream(vertPath);
ifstream fragStream(fragPath);
string line;
while (!getline(vertStream, line))
{
vertexShaderSource.append(line).append("\n");
}
vertStream.close();
while (!getline(fragStream, line))
{
fragmentShaderSource.append(line).append("\n");
}
fragStream.close();
vertexShaderSourcePointer = vertexShaderSource.c_str();
fragmentShaderSourcePointer = fragmentShaderSource.c_str();
vertexShaderLength = vertexShaderSource.length();
fragmentShaderLength = fragmentShaderSource.length();
vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShaderID, 1, &vertexShaderSourcePointer, &vertexShaderLength);
glCompileShader(vertexShaderID);
checkShader(vertexShaderID);
fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShaderID, 1, &fragmentShaderSourcePointer, &fragmentShaderLength);
glCompileShader(fragmentShaderID);
checkShader(fragmentShaderID);
programID = glCreateProgram();
glAttachShader(programID, vertexShaderID);
glAttachShader(programID, fragmentShaderID);
glLinkProgram(programID);
checkProgram(programID);
checkShader和checkProgram函数是使用glGetShaderiv和glGetProgramiv进行简单的错误检查,并将错误日志打印到stderr中。我已经检查了着色器和程序名称是否有效,它们是。我还检查了两个着色器的编译状态,并且编译没有问题。这段代码以前对我有用(使用不同的绑定),我不知道为什么它不起作用。
根据我的理解,这个错误信息是在着色器没有main()函数时显示的,但是我的。我很确定这是愚蠢的事情,但我整天都在盯着这一点无济于事。帮助
答案 0 :(得分:1)
如果您将文件作为一个字符串提供,而每行的末尾没有\ n字符,则可能会出现此错误。
答案 1 :(得分:-1)
您可以检查着色器的文件路径。
将其更改为:
myshader.loadShaderCode("Resources/shaders/default.vs", "Resources/shaders/default.frag")
自:
myshader.loadShaderCode("Resources\shaders\default.vs", "Resources\shaders\default.frag")