2

レンダリングされたシーンにフルスクリーンの写真のようなビネット効果を適用する必要があります。明らかに、これを達成するにはブレンディングを使用する必要があります。すべての画面スペースに適用されるため、可能な限り最速のブレンディングモードを選択したいと思います。

OpenGL ESの一部のブレンディングモードは、他のモードよりも高速に動作しますか?または、同じ充填率でブレンディングモードが機能しますか?これまでのところ、特定のブレンディングモードが他のモードよりも遅いまたは速いというインターネット上のリソースを見つけられなかったので、SOでこの質問をすることにしました。

これはAndroidアプリ用なので、もちろんこの動作はGPUベンダーに依存する可能性があることを理解していますが、ブレンドを高速化するための一般的な考慮事項があるのではないでしょうか。

4

3 に答える 3

5

ブレンディングの唯一の遅い部分は、バックバッファからピクセルを読み取ることです(アルファのみ、RGB、またはその両方は関係ありません)。したがって、カラー/アルファを使用した「実際の」ブレンディングである限りdst(つまり、縮退したブレンド関数のようなものや類似のものを使用していない場合glBlendFunc(GL_ONE, GL_ZERO)) glBlendFunc(GL_ZERO, GL_ONE)、パフォーマンスの違いはありません。

于 2013-02-07T08:15:39.140 に答える
1

どのブレンド オプションを選択しても問題ありません。ターゲット フレームバッファからピクセル値を読み取る必要があるため、フラグメント シェーダの速度が低下します。画面の境界の周りにセットアップされたいくつかのクワッドに効果を分割し、クワッドをオーバーレイせずにフレームバッファーの中央部分を残すことで、いくつかのサイクルを節約できます。また、Mali のような一部のタイル ベースのモバイル GPU で採用されている早期フラグメント破棄を使用するための、いくつかのトリッキーなアプローチを行うこともできますが、おそらくそれは努力する価値がありません。

于 2013-02-07T10:56:39.947 に答える
0

要するに、おそらく測定可能なほど悪いブレンドモードはありません (「実際の」ブレンドを行っている限り)。

ブレンディングは、固定関数のブレンド ステージを使用するか、実際のブレンディングを行うシェーダー プログラムに短いテールを追加することで実装できます。もう 1 つの解決策は、一般的なブレンド モードのほとんどに固定関数を使用し、一般的でないブレンド モードがある場合はシェーダーが引き継ぐことです。シェーダー 1 をヒットすると、パフォーマンスが低下する可能性があります。

何が良いか悪いかを知ることは、HW 固有のものであり、最大のコストは 2 つのバッファーを読み取って結合する必要があるため、測定できない可能性があります。比較的小さな余分なシェーディング コストではありません。

于 2013-02-11T15:16:34.830 に答える