0

OpenGL ES 2.x について簡単な質問をしたいと思います (または、最近の OpenGL リリースのほとんどで有効だと思います)。

次のうち、速いのはどれ?:

  1. 描くものによって複数のシェーダーを付けたり外したり、
  2. レンダリングモードをチェックするための均一変数を持つ; その結果、たくさんの if-else 条件 (つまり、switch-case ブロック) ができます。これは GPU コアには適していません。ただし、後で同じグループのプリミティブをレンダリングすると想定することもできます。つまり、あるモードから別のモードに頻繁に切り替えることはありません。

各ソリューションの長所と短所を説明できる場合。本当にありがたいです。3 番目のソリューションはいつでも大歓迎です。

4

1 に答える 1

0

それは、フラグメント処理がバインドされているときはいつでも、計算するデータの量に大きく依存します。

経験則として、状態の変更はパイプラインのフラッシュをトリガーするため、可能な限り避ける必要があります。さらに悪いことに、ユニフォームを変更すると、パイプライン フラッシュが引き起こされる可能性もあります。すべてのシェーダー スループットを使用していない場合は、その条件を試してください。

編集: データの順序を変更して、状態の変化がごくわずかになるようにする場合は、シェーダーを変更して、より多くのフラグメントを出力できるようにする必要があります。しかし、繰り返しになりますが、実際にはボトルネックがどこにあるかによって異なります。

ヒント: 測定します。

于 2013-05-09T12:54:56.010 に答える