私はWebGL(≈OpenGL ES 2.0)を使用しています。現時点では、私のアプリケーションでは、テクスチャユニット0がモデルごとのテクスチャとして使用され、1と2はシェーダが使用する定数テクスチャとして使用されています。テクスチャの初期化に関してglActiveTextureをどのように管理すればよいですか?
ロードし、テクスチャを設定するために、私は
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(...);
gl.texParameteri(...);
を行うしかし、これは、テクスチャが現在のテクスチャユニットに結合している状態でstomps。それだけで、とにかくあらゆるジオメトリを描画する前にリセットされ、テクスチャユニット0のための結合に影響するように、このプログラムを避けるために、私は、上記のコードの先頭に
gl.activeTexture(gl.TEXTURE0);
を追加しました。
「スクラッチ」テクスチャユニットを使用できるようになることはありません。この状態管理の問題には、ベストプラクティスが確立されていますか?
ありがとうございます。 "アクティブなテクスチャユニットのポリシーはどうでしょうか?" - 私はすでに述べた原則に従っていますが、 "他のテクスチャユニットの使用に最も影響を与えないテクスチャをどのように初期化すればよいですか?" –
あなたは私が話していることの別の例としてそれを読むことができます。 GLには、そのような「踏み外し」できる状態がたくさんあります。その作業には別のテクスチャユニットを使うことができます。つまり、何もリセットする必要はありませんが、 'glActiveTextureUnit()'を2回呼び出さなければなりません。または、現在のテクスチャユニットを壊して、テクスチャ状態を描画パートに設定する責任を渡すこともできます。いずれにしても、あなたのプログラムの一部には余分な作業があります。 –
一方的に行ったり、効率と保守性の間で*小さな*トレードオフになります。 –