GLSL片段着色器语法错误

问题描述:

以下简单的片段着色器代码失败,留下我在日志中的无信息消息: ERROR: 0:1: 'gl_Color' : syntax error syntax errorGLSL片段着色器语法错误

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

,而下面的一期工程:

void main() 
{ 
    glFragColor = gl_Color; 
} 

这博格尔斯我的想法,如在Lighthouse3D's tutorial gl_Color据说是一个vec4。为什么我不能将它分配给另一个vec4?

+0

错误信息是否真的是真的?它是否正常/预计会错过列/行号,并将“语法错误”文本包含两次? – unwind 2009-05-19 13:00:18

尝试正常分配。就像这样:

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

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

(参见OpenGL Shading Language Specification

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

这不像你的样品在我的mashine上编译得很好(Windows,Nvidia卡)