3

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

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

而以下一个有效:

void main()
{
  glFragColor = gl_Color;
}

这让我大吃一惊,因为在Lighthouse3D 的教程中 gl_Color 据说是 vec4。为什么我不能将它分配给另一个 vec4?

4

2 回答 2

7

尝试正常分配。像这样:

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

ETC

于 2009-05-19T13:15:45.447 回答
4

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

(请参阅OpenGL 着色语言规范

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

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

于 2009-05-19T13:37:30.970 回答