我已经谷歌了一点,我无法弄清楚出了什么问题。我的着色器:
#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;
}
答案 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()
。
但这个错误确实很神秘。