2013-07-24 30 views
5

我見過的所有WebGL示例代碼調用gl.useProgram(),然後爲每個框架設置程序的每個統一。事情是,你可以在WebGL項目中完成的兩件最昂貴的事情是運行Javascript代碼,並將JavaScript中的內容複製到着色器中,這裏每個人都在做每秒六十次。另外,我知道在我自己的程序中,大多數我的制服都不會隨着幀而改變。 (這主要是輕的位置等等,你可能可能混亂,但通常沒有。)我需要多久更新一次制服?

我的問題是,WebGL規範有沒有什麼可以說關於制服的值保存多久?如果我打電話給gl.useProgram(),那麼我剛剛停止使用的程序會不會失去其制服?如果調用gl.useProgram()擾亂制服,我可不可以每幀調用它,並且保留我的制服嗎?

如果我可以強迫所有用戶永遠運行Firefox 22.0,我可以編寫並運行一些測試代碼,並且可以在jiffy中找到它。可悲...

回答

2

制服的價值是與一個特定的程序相關聯。它不會因爲您切換到另一個程序而消失。 (我沒有一個規範的參考得心應手。)

也許你看到的是設置每一幀的制服代碼出於以下原因之一:

  • 簡單懶惰:這肯定會工作,其他的事情將需要思考。

  • 複製其他情況下的代碼,其中統一的確實需要每幀設置。

  • 複雜的懶惰:通常很難準確定義參數確實值的正確值發生變化的情況,因此只需重新計算每一幀。或者,確定它是否需要更改,甚至可能在計算上花費更多!

此外,每一幀制服並沒有那麼差,因爲只有少數制服,而且他們沒有太多數據。計算或複製頂點數組或其他每個場景對象的東西是您首先應該擔心的事情。