GLSL ES で複数のフラグメント シェーダーを順番に構成することは可能ですか? 2 つのシェーダー S1 と S2 を使用したいと考えています。ここで、S2 は S1 によって出力された複数のフラグメントを使用します。たとえば、2 つの畳み込みを順番に適用したい場合、2 番目の畳み込みは、多数のピクセル位置で最初の畳み込みの出力にアクセスする必要があります。
質問する
354 次
1 に答える
1
はい。ただし、これには2つの手法のいずれかを使用する必要があります。最初の最も簡単な方法は、マルチパスレンダリングと呼ばれます。その中で、S1の結果をテクスチャにレンダリングしてから、S1の結果を保持するテクスチャからS2の読み取り値をレンダリングします。ただし、GPUで可能な並列処理の一部が削除されるため、これは少し非効率的です。そのため、パイピングと呼ばれるものを使用することをお勧めします。これはもう少し複雑です。
- 2 * N個のテクスチャを作成します。ここで、Nはシェーダーの数です。これは、各シェーダーが読み取りテクスチャと書き込みテクスチャの両方を持つことができるようにするためです。
- すべてのシェーダーを一度にレンダリングし、その前のシェーダーの読み取りテクスチャから読み取り、書き込みテクスチャを書き込みます。
- 各フレームの終わりで、読み取りテクスチャと書き込みテクスチャを交換します。
これにより、複数の反復が同時に計算されます。ただし、各反復はN回の反復後に終了します。
于 2012-06-21T22:27:58.510 に答える