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

时间:2012-01-22 06:20:41

标签: opengl glsl

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

#version 120

attribute vec2 coord2d;
void main(void) 
{
    gl_Position = vec4(coord2d, 0.0, 1.0);
}

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

glLinkProgram:Vertex info
-----------
0(3) : error C1013: function "main" is already defined at 0(4)

我已经检查过以确保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;
}

3 个答案:

答案 0 :(得分:19)

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

修改

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

但这个错误确实很神秘。