状況
私は画像コンポジターを作成しており、FBO を使用しています。
gl は現在書き込んでいるテクスチャを読み取ることができないため、現在、疑似「Fbo フリップ チェーン」ロジックを使用しています。約 10 個の FBO のリストを作成し、レンダリングするたびに、以前の FBO テクスチャの 1 つから問題なく読み取ることができる次の FBO に移動します。
ただし、これには深刻な欠陥があります。これは、現在コンポストを行っている方法のため、現在の状態でまだ必要な場合に fbo を上書きすることができるためです。「ロック/ロック解除」ロジックを結びましたが、不安定です。
現在、画像は次の段階を経ています。
- イメージをテクスチャに描画します (fbo を使用)
- fbo フリップ
- すべての画像「子」を画像に合成します
- 各子のfboフリップはこれが問題です
- 画像を目的のタイプに変換します
- fbo フリップ
- 画像を目的地とブレンドする
- fbo フリップ
- 兄弟との堆肥化のためにテクスチャを渡す
このフリップ チェーン合成のアイデアを再構成することにしました。私の見方では、次のいずれかを実行することをお勧めします。
可能な解決策
- 各画像には独自の複数の fboが含まれ、それぞれに独自のレンダー ターゲットがあり、各段階で指定された fbo に切り替えます*
- 各イメージには 1 つの fbo と複数のテクスチャ ターゲットが含まれ、ステージごとにアタッチメントが変更されます*
- 各画像には2 つのレンダー ターゲット(「前面」、「背面」) があり、1 つのマスター fboがあり、マスター fbo は「前面」テクスチャを上書きし、「背面」テクスチャから読み取ります (バック バッファーのように考えます)。およびフロント バッファ)。各ステージ*の終わりにそれらを交換します。
*(各ステージ = フリップが現在実行されている場所)
私は現在、番号 2 に傾いています。各イメージは、各ステージに指定される 4/5 のテクスチャで終わります。また、画像が「描画」されると、別の段階から描画を開始できるかどうかをテストできます。
たとえば、画像は描画され、既に正しいタイプに変換されているため、"post_convert" テクスチャを取得してブレンドするだけです。
問題:
- レンダー ターゲットのアタッチとデタッチのどちらが速いかはわかりません。または拘束力のあるFBO...
- 現在、非常に多くのテクスチャと fbo が飛び交っています。また、C# で GL を使用してプログラミングを行っているという事実に非常に警戒しているため、C# の GC と並行して gl メモリを管理するシステムを確立する必要があります。