2009-05-19 187 views
3

以下簡單的片段着色器代碼失敗,留下我在日誌中的無信息消息: 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

回答

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

4

Aparrently你應該使用稍微不同的語法

(參見OpenGL Shading Language Specification

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

這不像你的樣品在我的mashine上編譯得很好(Windows,Nvidia卡)