私は OpenTK、opengl ES 2.0 を使用しており、再描画ごとに深度バッファを外部からロードされたものにクリアしたいと考えています。
私が達成したいのは、カメラと背景オブジェクトが動かない状況に備えて、事前にレンダリングされた画像とその深度バッファーに画面をクリアし、その上に動くオブジェクトのみを従来の方法でレンダリングすることです。
パフォーマンス効率の良い方法でこれを行うにはどうすればよいですか?
gl_FragCoord
は不変であり、GLES SL は を提供しませんgl_FragDepth
。そのため、フラグメント シェーダー内でフラグメントの出力深度を設定する方法はありません。
結果として、次の 2 つのオプションが表示されます。
前者を行うには、深度テクスチャをスペア ユニットにバインドし、続いて に基づいてフラグメント シェーダーで明示的な比較と破棄を行いgl_FragCoord
ます。
後者を行うには、フラグメントごとに 1 つのポイントの配列を送信し、頂点シェーダー内の深度テクスチャをサンプリングして、深度を適切に出力します。ハードウェアが頂点シェーダー内のテクスチャ サンプリングをサポートしていない場合は、CPU 上で同じことを行うことができます。CPU で計算されたフラグメントを VBO に残しておけば、フレームごとに多くの支払いが発生することはありません。