【问题标题】: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 有效。您还需要在着色器中定义顶点属性,仅在程序中绑定它们是不够的。

标签: c++ opengl glsl


【解决方案1】:

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

Khronos OpenGL wiki - Type Qualifier (GLSL):

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

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

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

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多