Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 0(3):错误C1013:函数;“主要”;已在0(4)处定义_Opengl_Glsl - Fatal编程技术网

Opengl 0(3):错误C1013:函数;“主要”;已在0(4)处定义

Opengl 0(3):错误C1013:函数;“主要”;已在0(4)处定义,opengl,glsl,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 defin

我在谷歌上搜索了一下,但我不知道怎么回事。我的着色器:

#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)
我已经检查过了,以确保这些恶行能够正确地进入记忆。它们编译得很好。这是一个连接步骤,有什么地方出了问题。我不知道是什么,我已经在这个问题上思考了很长一段时间了。有什么建议吗

编辑:

下面是我用来创建着色器的代码。它一直到条件,实际上完全完成了执行,但是日志会打印出上面看到的内容

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;
}

<> GLSL不是C或C++。code>void不能用作唯一参数,如在
void main(void)
中。您需要的是
void main()


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

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

编辑

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

我今天发生了此错误。 这是因为我复制/粘贴了太多的代码。 我称之为glCreateShader(GLU顶点着色器);对于我的顶点和片段着色器。
他们编译得很好,但它们不会链接,因为它们都是顶点着色器。

<代码>无效主()/<代码>无效c++,而C.@ KerrekSB中的风格不好:我猜这既不是C++也不是C++代码,这是一件好事。你能显示着色器加载代码吗?您用来将着色器加载到OpenGL以便它可以编译和链接的代码?其余部分在哪里?你构建那些着色器对象的部分?它构建得很好。我使用这里创建的着色器:不,Nicol Bolas已经指出了问题。问题是:编译器悄悄地预先声明了一个符号
void main()
,即在着色器中编写的主函数是函数定义,但不声明。OP编写main的方式与预先声明的符号冲突,但编译器不会告诉您“错误的签名”,而是抛出一个错误,表示“符号已声明,但类型不同”。为我选择我的答案datenwolf?:p无论如何。加载代码很有意义,我使用本教程创建着色器和着色器源代码:我将添加我的创建程序并将那边的+1链接到您的编辑。我在学习一些openGL教程时遇到了这个问题,并且完全按照你说的做了:
GL\u VERTEX\u SHADER
而不是
GL\u FRAGMENT\u SHADER
调用。我只是尝试了一下,没有成功。问题是我怀疑这些着色器是问题所在。这些是已知的工作着色器。我在另一个程序,一个教程中使用了它们,事实上,重建这个程序并使用这些精确的着色器成功了。谢谢!我做了完全相同的事情。2020年仍然会发生!