2010-12-04 36 views
0

我想在WebGl中製作一個簡單的3D應用程序,其中繪製的每個對象都附加了它自己的着色器。但是我在Firefox中遇到了一個奇怪的問題(在Chrome中這是完美的),其中每個着色器中每個矩陣/採樣器的統一位置都沒有正確保存。這意味着我必須爲每次更改當前着色器時着色器使用的每個矩陣調用getUniformLocation,這對我來說似乎有點浪費。WebGl制服返回值

tmp.pMatrixUniform = this.gl.getUniformLocation(tmp, "uPMatrix"); //perpesctive 
tmp.mvMatrixUniform = this.gl.getUniformLocation(tmp, "uMVMatrix"); //world transform 
tmp.samplerUniform = this.gl.getUniformLocation(tmp, "uSampler"); //texture sampler 

return tmp; 

上面的代碼是我創建着色器並將其存儲以供跨多個對象使用的地方。我知道tmp着色器對象的引用是正確存儲和修改的,因爲正好在這些代碼行的上方,我以類似的方式保存每個屬性位置,不需要爲每個「當前着色器」 。

就像我說的,這隻在Firefox中不起作用,這讓我相信Firefox和Chrome存儲統一的位置有所不同。有沒有人知道另一種方式來存儲這些值,以便它可以在兩個瀏覽器中工作,而不必爲每一幀「重新獲得」它們?

+0

如果你剛剛發現導致我的應用在FF4中只顯示一幀的問題,然後才黑起來,我不會感到驚訝。 – 2010-12-04 22:33:11

回答

2

我解決了這個問題。事實證明,這不是函數本身的問題,但是當切換到新的着色器時,我總是會鏈接它,而不是僅在創建時鏈接着色器。