1

A、B、C、D の 4 つのコンテンツ レイヤーがあるとします。それぞれが 1 種類のビジュアル コンテンツを表します。

各レイヤーは、いくつかの連続したレンダリング呼び出しを行います (さまざまなレイヤーからのインターリーブされたレンダリング呼び出しはありません)。

また、ビジュアル エフェクトを適用するには、レイヤ B と D をテクスチャにレンダリングする必要があります。メモリ フットプリントを削減するために、テクスチャが 1 つだけの FBO を 1 つだけ使用します。

だから、現時点で私は:

  • A コンテンツをレンダリングします。
  • FBO のバインド > B コンテンツのレンダリング > FBO のバインド解除 > テクスチャのレンダリング (B コンテンツ);
  • C をレンダリングします。
  • FBO のバインド > D コンテンツのレンダリング > FBO のバインド解除 > テクスチャのレンダリング (D コンテンツ)。

このアプローチの主な問題は、FBO をバインド/バインド解除するたびに、デフォルトのフレームバッファがメモリに保存/メモリから復元されることです。

レイヤーのレンダリング順序を変更できないため、レイヤー B と D を最初に FBO に単純に描画することはできません。

これを行い、メイン フレーム バッファの多くの保存/復元を回避するより良い方法はありますか? これは一例であり、実際のケースはより複雑 (より多くのレイヤー) であることに注意してください。

4

2 に答える 2

0

レンダー ターゲットをすばやく切り替えることが、FBO 機能の本来の目的です。レンダリング コンテキストの変更に対処する必要がないため、通常は古い pbuffer アプローチよりも高速です。また、FBO は、pbuffers ほど、レンダリング サーフェスを割り当てるために EGL に依存しません。Adreno 200 が FBO をすばやく切り替えることができない場合、それは Adreno 固有の実装上の問題です。

于 2013-08-06T20:57:08.107 に答える