C++ GLSL错误:2001-此错误代码是什么意思?

C++ GLSL错误:2001-此错误代码是什么意思?,c++,opengl,glsl,C++,Opengl,Glsl,当发生编译错误时,我在查询信息日志后得到了这个消息。我还没有找到一个资源来告诉我错误代码的含义 使用Ubuntu 9.10和支持glsl 1.1的英特尔移动芯片组。台面驱动器 顶点着色器: #version 110 in vec3 m2d_blendcolor; out vec3 color; // out vec2 texcoord0; void main(void) { gl_Position = ftransform(); color = m2d_blendcolor;

当发生编译错误时,我在查询信息日志后得到了这个消息。我还没有找到一个资源来告诉我错误代码的含义

使用Ubuntu 9.10和支持glsl 1.1的英特尔移动芯片组。台面驱动器

顶点着色器:

#version 110
in vec3 m2d_blendcolor;

out vec3 color;
// out vec2 texcoord0;

void main(void)
{
    gl_Position = ftransform();
    color = m2d_blendcolor;
}
片段着色器:

#version 110

in vec3 color;

void main(void)
{
    gl_FragColor = vec4(color, 1.0);
}
初始化着色器对象时,我调用:

shader.bindAttrib(0, "m2d_vertex");
shader.bindAttrib(1, "m2d_texcoord0");
shader.bindAttrib(2, "m2d_blend_color");
这些电话

glBindAttribLocation(m_programID/*internal GLuint*/, index, attribName.c_str());

是不是我绑定顶点属性太快了?绑定着色器时是否必须绑定它们?

修复了此问题。对于glsl 1.1,输入和输出限定符无效

见:

从GLSL 1.30(OpenGL 3.0)开始,以下限定符已被弃用,并已从GLSL 1.40及更高版本中删除

属性
限定符实际上相当于顶点着色器中的输入限定符。它不能用于任何其他着色器阶段。它不能在接口块中使用

variable
限定符相当于片段着色器的输入或顶点着色器的输出。它不能用于任何其他着色器阶段。它不能在接口块中使用


修好了。对于glsl 1.1,输入和输出限定符无效

见:

从GLSL 1.30(OpenGL 3.0)开始,以下限定符已被弃用,并已从GLSL 1.40及更高版本中删除

属性
限定符实际上相当于顶点着色器中的输入限定符。它不能用于任何其他着色器阶段。它不能在接口块中使用

variable
限定符相当于片段着色器的输入或顶点着色器的输出。它不能用于任何其他着色器阶段。它不能在接口块中使用


哪一行产生了错误代码?我不知道哈哈,梅萨不会告诉我的!日志上只写着“错误:2001”。句号,等等。。。您的着色器没有m2d_texcoord0和m2d_顶点。。。甚至m2d_混合_颜色(检查下划线)。我会试着先把它们修好。最后该着色器代码在我看来不像GLSL…m2d_*是我从编译代码中传入的顶点属性。这两个着色器都不是有效的GLSL 1.1。输入/输出只能用于功能参数。但它可能对GLSL 1.3有效。你还需要在着色器中定义顶点属性,仅仅在程序中绑定它们是不够的。哪一行生成了错误代码?我不知道,哈哈。MESA不会告诉我的!日志上只写着“错误:2001”。句号,等等。。。您的着色器没有m2d_texcoord0和m2d_顶点。。。甚至m2d_混合_颜色(检查下划线)。我会试着先把它们修好。最后该着色器代码在我看来不像GLSL…m2d_*是我从编译代码中传入的顶点属性。这两个着色器都不是有效的GLSL 1.1。输入/输出只能用于功能参数。但它可能对GLSL 1.3有效。您还需要在着色器中定义顶点属性,仅在程序中绑定它们是不够的。