我已经谷歌了一点,我无法弄清楚出了什么问题.我的着色器:
#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 一致.
小智 10
我今天有这个错误。发生这种情况是因为我复制/粘贴了太多代码。我打电话给 glCreateShader(GL_VERTEX_SHADER); 对于我的顶点着色器和片段着色器。他们编译得很好,但他们不会链接,因为他们都是顶点着色器。