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