2012-02-06 19 views
5

これはSwitch shader program in WebGLに関連していますが、私は問題を再確認したいと思っています。glUseProgramの後に失われ/リセットされる状態は?

私は別のシェーダプログラムを切り替えようとしていますが、同じレンダリングでシェーダプログラムを切り替えると正しく表示されないようです。 glUseProgram()に電話した後に状態が失われたりリセットされたりしたと思います。

呼び出し後に失われたりリセットされた状態は?つまり、glUseProgram()の後に再度バインドする必要はありますか?

答えて

0

頂点配列と頂点アトリビュート配列の位置が他のプログラムで異なる場合(例えば、this.locATex)、テクスチャバインディングやサンプラーユニフォームで同じ問題が発生する可能性があります。個々のプログラムのために、自分自身を初期化し、描画する前に配列とテクスチャをバインドする必要がある属性位置と 'テクスチャユニットユニフォーム'を照会する必要があります。断片データの位置など、他の端にあるさらなるバインディングも中断することがあります。しかし、私は新しい問題が発明される前にいくつかのコードを提供することをお勧めします:-)。

+1

アドバイスをいただきありがとうございますが、私はより一般的なアドバイスを求めていました。私はユニフォームを再度設定する必要がありますか、その価値を維持していますか?属性または均一な場所は、与えられた1つのプログラムに対してその値を保持しますか?テクスチャを再度有効にする必要がありますか?等々。 – AshleysBrain

+0

Attribの場所と実際の均一な場所と値は、プログラムがリンクされた後も保持されます。しかし、統一バッファは、より多くのプログラムにバインドすることができます。固定機能のパイプラインを使用していないため、テクスチャを再度有効にする必要はありません。 – Sam

+0

テクスチャユニットには複数のアタッチメントポイントがあります。たとえば、2Dテクスチャと3Dテクスチャをバインドし、適切なサンプラユニフォームを使用してそのいずれかにアクセスできます。 – Sam