2016-03-30 8 views
0

WebGLには長いシェイプパイプラインがあり、各シェーダは入力テクスチャから読み込み、別のテクスチャにレンダリングし、最後に最後のテクスチャには望ましい結果が含まれています。レンダリング中にWebGLのテクスチャを再利用する

パイプラインのテクスチャをと同じように再利用できますか?同期して実行していたかのようにしますか?

// ... init texA to contain input ... 
shader1.samplingFrom(texA).renderTo(texB); 
shader2.samplingFrom(texB).renderTo(texA); 
shader3.samplingFrom(texA).renderTo(texB); 
return readPixels(texB); // Always the same answer? 

この点については、次のステージが始まる前にシェーダ仕上げに頼ることができますか?

// ... init texA to contain input ... 
shader1.samplingFrom(texA).renderTo(texB); 
shader2.samplingFrom(texB).renderTo(texC); 
shader3.samplingFrom(texC).renderTo(texD); 
return readPixels(texD); // Always the same answer? 

私が最初に私はテクスチャを再利用することができると思ったが、私はパイプラインをストール場合、私は(いくつかの種類の競合状態を意味している)消える奇妙な行動に気づいてきたので、今、私は保証が何であるかわからないんだけど提供されます。

+0

私が見ていたバグは、まだレンダリングされていないテクスチャからのレンダリングによるものでした。なぜそれがそれをしたのかはわかりませんが、並行性の問題ではありませんでした。しかし、この質問に対する答えを知ることにはまだ関心があります。 –

答えて

1

はい、テクスチャを再利用できます。 OpenGL/WebGLで行うことができないことは、同じ描画呼び出しで同じテクスチャから読み込まれ、同じテクスチャにレンダリングされます。

また、少なくともOpenGLでは、シェーダはパラレルではなく、順番に実行されます。 1つのシェーダが内部的に並列処理を行うかもしれませんが、結果は連続して実行した場合と同じである必要があります。

関連する問題