私は現在、OpenGL3Dエンジンにデプスピーリングを実装しています。値を深度2Dテクスチャ配列に格納したいと思います。アルゴリズムは、そのn番目の実行時に、n-1層を読み取る必要があり、現在の値が大きい場合(オブジェクトが遠くにある場合)、現在の値をn番目の層に挿入します。ただし、同じテクスチャで読み書きできるとは限りません。
たとえば、そこから読み取り(n-1番目のレイヤーのみ)、現在のFBOの深度アタッチメントとしてn番目のレイヤーをアタッチすることは可能でしょうか?
ただし、同じテクスチャで読み書きできるとは限りません。
誰が言ったのですか?
テクスチャは画像を保存します。複数形に注意してください。同じテクスチャからの読み取りと同じテクスチャへの書き込みを禁止するものはありません。同じ画像からの読み取りと同じ画像への書き込みは禁止されています。
配列テクスチャには複数の画像が含まれています。各配列レイヤーは、独自の2D画像(または2Dミップマップ画像のセット)です。したがって、ある配列レイヤーから読み取り、別のアレイレイヤーに書き込むことは完全に合法です。配列レイヤー内の1つのミップマップから読み取り、同じ配列レイヤー内の別のミップマップに書き込むことは完全に合法です。
違法なのは、同じ配列レイヤーの同じミップマップでの読み取り/書き込みです。
これが、同じテクスチャがFBOにアタッチされていると同時に、読み取り用のレンダリングコンテキストにバインドされている場合でも、OpenGLがエラーを発生させない理由です。これは、同じ画像からの読み取り/同じ画像への書き込みを行わないことを保証する限り、合法です。