【发布时间】: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);