我試圖創建一個übershader表示這可能會有些波陣面數據或可能不包含一些屬性,如:GLSL着色器可選屬性
- 一個或多個對象可能包含
uv
座標和紋理 - 一個或多個對象可能包含正常映射爲每個頂點
- 一種或多種材料可能具有不同的照明類型來呈現,並且包含用於凹凸映射紋理
等。
現在,它可能或可能不是一個好主意,爲此創建一個ubershader(我正在嘗試),但我面臨的問題是一些屬性被指定,一些不是(缺少制服,如紋理未設置採樣器的布爾值統一可以打開和關閉採樣功能)。
是什麼在GLSL v 3.00發生時的屬性是既未分配(這意味着沒有glEnableVertexAttribArray
,例如,還沒有綁定任何/任何緩衝液)在GLSL程序不用於閱讀(例如,我將使用一個統一的boolean
把紋理查找關閉,當UV座標缺失,但我仍然會插的座標爲頂點和片段着色器之間的輸入/輸出,像這樣:
// Vertex shader
in vec3 vn;
out vec3 fvn;
[...]
fvn = vn;
...)?
這是glsl的合法使用,還是會產生奇怪的兼容性問題(我正在開發移動設備,正如OpenGL ES3.0標記所暗示的)?
我正在尋找第一手經驗或權威來源,
謝謝!
你是什麼意思「既沒有指定也沒有使用」?具體由「未指定」? –
@NicolBolas謝謝你的評論(我的解釋不清楚)!我會立即糾正這個問題,儘管我認爲Reto的答案能夠解決我的問題。 – Rick77