GLSL 链接器错误:找不到"void main()"的定义
GLSL Linker Error: Definition for "void main()" not found
我在尝试创建和链接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")
相关文章:
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- C++:main() 未捕获的异常的自定义格式
- C++/生成文件错误:未定义对"main"的引用
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 可视化 如何修复 c++ 中已经定义的 -main?
- 在 Linux 上编译 - 在函数 '_start' 中:(.text+0x20):对 'main' 的未定义引用
- C++错误:在类中取消对main的定义引用
- crt1.o:在函数"_start"中:(.text+0x20):对"main"的未定义引用
- Main.Obj中已经定义的主要
- main.cpp:(.text+0x8ea):在C++中未定义的引用
- 实用程序函数不会在 .h 文件中初始化并在 main 中定义.cpp
- C :使用Main中定义的对象方法的函数
- 已在main.obj中定义了双精度
- C++ 编译错误:- 使用Makefile对"main"进行多重定义
- 如何将包含多个.cpp源文件的文件夹导入Eclipse项目中,每个源文件都有一个main()定义
- main.cpp:(.text+0x8f):对[对象方法]的未定义引用
- C++编译错误:多个定义"main",但项目中只有一个 main 函数
- 在 main() 中定义全局变量
- 为什么这个将main定义为函数指针的程序会失败?