2012-02-06 70 views
5

這與Switch shader program in WebGL有關,但我想重新提出這個問題,現在我對問題有了更清楚的認識以及我想問什麼。glUseProgram後,什麼狀態丟失/重置?

我試圖在不同的着色器程序之間切換,但我似乎無法在同一渲染中切換着色器程序時正確渲染。我認爲在撥打glUseProgram()之後,狀態丟失或重置。

該通話後,哪些狀態丟失或重置?換句話說,我需要在glUseProgram()後再次綁定?

回答

0

有可能您的頂點陣列和頂點attrib陣列在其他程序(例如this.locATex)中具有不同的位置,例如紋理綁定和採樣器制服可能會出現同樣的問題。您需要單獨查詢每個程序的那些attrib位置和「紋理單元制服」,您需要自行初始化,並在繪製之前相應地綁定陣列和紋理。另一端的進一步綁定也會中斷,比如片段數據位置。但我建議,在發現新問題之前,您提供了更多的代碼:-)。

+1

感謝您的建議,但我一直在尋找更一般的建議,就像我需要再次設置制服還是保持其價值?屬性或統一位置對於一個給定的程序是否堅持其價值?紋理是否需要重新啓用?等等。 – AshleysBrain 2012-02-06 17:26:17

+0

鏈接程序後,Attrib位置和實際統一的位置和值仍然存在。統一緩衝區可以綁定到更多的程序。紋理不需要重新啓用,因爲您沒有使用固定功能管線。 – Sam 2012-02-06 17:35:34

+0

紋理單元具有多個附着點,例如可以綁定2D和3D紋理,並使用適當的採樣器制服訪問它們中的任何一個。 – Sam 2012-02-06 17:37:09