GLSL 链接器错误:找不到"void main()"的定义

GLSL Linker Error: Definition for "void main()" not found

本文关键字:main 定义 void GLSL 错误 找不到 链接      更新时间:2023-10-16

我在尝试创建和链接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中。我已经检查了shader和程序名称是否有效,它们是有效的。我也检查了两个着色器的编译状态,它们编译没有问题。这段代码以前为我工作过(使用不同的绑定),我不知道为什么它不起作用。

根据我的理解,这个错误信息是指当着色器没有main()函数时显示的,但我的有。我很确定这是什么愚蠢的东西,但我盯着它看了一整天都无济于事。帮助吗?

如果您将文件作为一个字符串输入,每行末尾没有n字符,则可能会得到此错误。

您可以检查着色器的文件路径。

改为:

myshader.loadShaderCode("Resources/shaders/default.vs", "Resources/shaders/default.frag")
来自:

myshader.loadShaderCode("Resourcesshadersdefault.vs", "Resourcesshadersdefault.frag")