2
我正在使用WebGL(≈OpenGL ES 2.0)。目前,我的應用程序使用紋理單元0作爲每個模型的紋理,以及1和2作爲着色器使用的常量紋理。我應該如何在初始化紋理時管理glActiveTexture?
爲了加載和設置紋理,我
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(...);
gl.texParameteri(...);
然而,這跺腳在其上的紋理結合到當前的紋理單元的狀態。爲了避免這個程序中,我添加
gl.activeTexture(gl.TEXTURE0);
上述代碼的開始,以使得它僅影響針對其無論如何繪製任何幾何形狀之前重置紋理單元0的結合。
是否有更好的方法,即不涉及發生有「劃痕」紋理單元的情況?對於這種國家管理問題,是否有一個確定的最佳做法?
謝謝,但我不是問「主動紋理單元的策略應該是什麼?」 - 我已經遵循了你所描述的原則 - 但是「我應該如何初始化紋理,儘量不干擾我對紋理單元的其他用途?」,這可能意味着對規則的限制。 – 2012-04-28 17:26:56
你可以把它當作我正在談論的另一個實例。在GL中有很多狀態可以像這樣「踩踏」。你可以爲該工作使用單獨的紋理單元,這意味着你不必重置任何東西,但必須調用'glActiveTextureUnit()'兩次。或者你可以摧毀當前的紋理單元,然後將設置紋理狀態的責任傳遞給繪圖部分。無論哪種方式,你的程序的一部分(有點)有一些額外的工作要做。 – 2012-04-28 17:35:12
從某種角度來看,它可以歸結爲效率和可維護性之間的一個小的折衷。 – 2012-04-28 17:37:34