0(3):错误C1013:函数"main"已定义为0(4)

Nar*_*ser 5 opengl glsl

我已经谷歌了一点,我无法弄清楚出了什么问题.我的着色器:

#version 120

attribute vec2 coord2d;
void main(void) 
{
    gl_Position = vec4(coord2d, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

我知道这个着色器有效,但当我尝试链接程序时,我得到:

glLinkProgram:Vertex info
-----------
0(3) : error C1013: function "main" is already defined at 0(4)
Run Code Online (Sandbox Code Playgroud)

我已经检查过以确保viles正确地进入内存而不是内存.他们编译得很好.出现问题是连接步骤.我对于什么感到无能为力,而且我已经在这方面打了很长时间.有小费吗?

编辑:

这是我用来创建着色器的代码.它一直到条件,它实际上完全完成执行,但日志打印出你在上面看到的.

GLuint updateProg()
{
    prog = glCreateProgram();
    if (vs == 0 || fs == 0) return 0;
    glAttachShader(prog, vs);
    glAttachShader(prog, fs);
    int link_ok;
    glLinkProgram(prog);
    glGetProgramiv(prog, GL_LINK_STATUS, &link_ok);
    if (!link_ok) 
    {
        fprintf(stderr, "glLinkProgram:");
        print_log(prog);
        return 0;
    }
    return prog;
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*odd 20

该错误听起来像您可能试图链接着色器的两个副本?检查代码以创建着色器对象,将代码加载到它们中,并将它们链接到程序对象中.也就是说,仔细检查所有对glCreateShader,glShaderSource,glCreateProgram和glAttachShader的调用,以确保它们有意义.

编辑

您已经添加了上面调用glCreateProgram的代码,但没有调用调用glCreateShader的代码.您的错误与意外(错误地)传递GL_VERTEX_SHADER给片段着色器的glCreateShader 一致.

  • +1编辑.我在处理一些openGL教程时遇到了这个问题,并且完全按照你所说的那样做了:`GL_VERTEX_SHADER`而不是'GL_FRAGMENT_SHADER`用于`glCreateShader`调用. (2认同)

小智 10

我今天有这个错误。发生这种情况是因为我复制/粘贴了太多代码。我打电话给 glCreateShader(GL_VERTEX_SHADER); 对于我的顶点着色器和片段着色器。他们编译得很好,但他们不会链接,因为他们都是顶点着色器。

  • 谢谢!我做了完全相同的事情。 (2认同)

Nic*_*las 0

GLSL 不是 C 或 C++。void不能用作唯一参数,如 中void main(void)。你想要的是void main()

不过,这个错误确实很神秘。