【问题标题】:GLSL fragment shader syntax errorGLSL 片段着色器语法错误
【发布时间】:2009-05-19 12:43:15
【问题描述】:

以下简单的片段着色器代码失败,在日志中留下一条信息不完整的消息: ERROR: 0:1: 'gl_Color' : syntax error syntax error

void main()
{
  vec4 myOutputColor(gl_Color);
  gl_FragColor = myOutputColor;
}

虽然以下一个有效:

void main()
{
  glFragColor = gl_Color;
}

这让我大吃一惊,因为Lighthouse3D's tutorial gl_Color 据说是 vec4。为什么我不能将它分配给另一个 vec4?

【问题讨论】:

  • 报错信息真的是真的吗?错过列/行号并包含两次“语法错误”文本是否正常/预期?
  • 是的,错误消息是真实的(我在示例中省略了下划线,因此进行了编辑)。我真的不知道 GLSL 信息日志的正常/预期是什么;在大多数情况下,错误的位置没有显示,只是有问题的变量/函数名称。 (环境为 OS X、xcode、OpenGL 2.0 带 ATI 驱动 v1.5)
  • bumpbump* 嘿,懒鬼!它奏效了吗? ;)
  • 确实做到了。我很犹豫我应该接受谁的答案,因为两者都工作得很好,但为了简洁/人类可读性,我最终选择了你的答案。
  • 第二个答案确实是正确的,但没有任何必要使用 vec4() 构造函数,因为两者属于同一类型。如果你有一个 (r,g,b,w) 元组,你可以这样写: vec4 myOutputColor = vec4(r, g, b, w);

标签: opengl glsl shader


【解决方案1】:

尝试正常分配。像这样:

void main()
{
  vec4 myOutputColor = gl_Color;
  gl_FragColor = myOutputColor;
}

编辑:

第二个答案确实是正确的,但是没有任何必要使用 vec4() 构造函数,因为它们都是相同的类型。如果你有一个 (r,g,b,w) 元组,你可以这样写:

vec4 myOutputColor = vec4(r, g, b, w);

// assuming myRgbColor is a vec3
vec4 myOutputColor = vec4(myRgbColor, w);

【讨论】:

    【解决方案2】:

    显然你应该使用稍微不同的语法

    (见OpenGL Shading Language Specification

    vec4 myOutputColor = vec4(gl_Color);
    gl_FragColor = myOutputColor;
    

    这与您的示例不同,在我的机器(Windows、Nvidia 卡)上编译得很好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 2013-07-30
      • 2020-11-20
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多