GLSL 错误:2001 - 此错误代码是啥意思?

Posted

技术标签:

【中文标题】GLSL 错误:2001 - 此错误代码是啥意思?【英文标题】:GLSL Error: 2001 - What does this error code mean?GLSL 错误:2001 - 此错误代码是什么意思? 【发布时间】:2010-03-06 22:50:39 【问题描述】:

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

将 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());

是不是我绑定顶点属性太快了?绑定shader的时候一定要绑定吗?

【问题讨论】:

哪一行生成错误代码? 我不知道,哈哈。台面不会告诉我的!它在日志中所说的只是“错误:2001”。期间。 等等...您的着色器没有 m2d_texcoord0 和 m2d_vertex... 甚至 m2d_blend_color (检查下划线)。我会尝试先解决这些问题。最后...着色器代码在我看来不像 GLSL... m2d_* 是我从编译代码中传入的顶点属性。 两个着色器都不是有效的 GLSL 1.1。 in/out 只能用于函数参数。不过它可能对 GLSL 1.3 有效。您还需要在着色器中定义顶点属性,仅在程序中绑定它们是不够的。 【参考方案1】:

修复它。在 glsl 1.1 中,in 和 out 限定符无效。

见Khronos OpenGL wiki - Type Qualifier (GLSL):

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

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

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

【讨论】:

以上是关于GLSL 错误:2001 - 此错误代码是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

“进程已分叉,您无法安全地使用此 CoreFoundation 功能。您必须执行()。”是啥意思?错误是啥意思?

糟糕,网页无法访问,错误代码显示的是400是啥意思?

在此错误消息中“直接在 useEffect 中移动此变量”是啥意思?

此 WCF 错误是啥意思:“自定义工具警告:无法导入 wsdl:portType”

在此构建期间“以代码 9009 退出”是啥意思?

编译时错误“架构 x86_64 的未定义符号”是啥意思?