我有一個有故意的語法錯誤的GLSL片段着色器。爲什麼GLSL代碼編譯和鏈接,即使它有語法錯誤?
void main()
{
// vec4 is ommitted
gl_FragColor = (1,1,0,1);
}
但我仍然可以編譯和鏈接它沒有錯誤。運行我的應用程序 後,屏幕上什麼都看不到。這是一種奇怪的行爲還是別的?
我有一個有故意的語法錯誤的GLSL片段着色器。爲什麼GLSL代碼編譯和鏈接,即使它有語法錯誤?
void main()
{
// vec4 is ommitted
gl_FragColor = (1,1,0,1);
}
但我仍然可以編譯和鏈接它沒有錯誤。運行我的應用程序 後,屏幕上什麼都看不到。這是一種奇怪的行爲還是別的?
您已使用逗號運算符。
您的代碼評估每一個逗號分隔號,並丟棄所有這些除了最後一個,這樣它等同於寫
gl_FragColor = (1);
在括號只是進行分組,而不是一個函數調用,這樣可以忽略不計。當您分配一個值到一個向量它複製該值的所有組件,以便您的說法是一樣的書寫 -
gl_FragColor = vec4(1,1,1,1);
是「背景」白?在這種情況下,你什麼都看不到。
我編輯了這個問題,試圖更好地格式化問題。如果您認爲它太多,請隨時回滾/編輯更改。 – Hydronium 2013-04-11 13:56:57
哪個'#版本'是你的着色器,你在做什麼? (我在NVidia桌面GPU上得到了「從int到vec4的隱式投射」,用於「#version 130」....) – 2013-04-11 16:36:23
GLSL版本:3.3,操作系統:Ubuntu 12.04LTS,顯卡:ATI Radeon 4650 – 2013-04-11 21:32:08