1

クエリ オブジェクトが何であるかは知っていますが、GL_SAMPLES_PASSED と GL_ANY_SAMPLES_PASSED の違いを完全には理解していません。リファレンス ページには、GL_ANY_SAMPLES_PASSED について次のように記載されています。GL_ANY_SAMPLES_PASSED の場合、「任意の」サンプルが深度テストに合格すると、後続のレンダリングでフラグが GL_TRUE に設定されます。

つまり、唯一の違いは、渡されたサンプルの数をカウントする必要がないため、GL_ANY_SAMPLES_PASSED を使用したクエリ オブジェクトの方がはるかに高速であることです。カウントではなく true/false を返すだけであり、これは条件付きレンダリングにも役立ちます。 (真偽値のため)。

4

1 に答える 1

2

GL_ANY_SAMPLES_PASSEDより速いかどうかGL_SAMPLES_PASSEDは不明です。テスト全体がパイプラインを介してレンダリングを完了するまで、答えが何であるかを知ることができないため、どちらの方法もレンダリングに関しては高速ではありません。

両方とも使用できるため、条件付きレンダリングのシナリオにはあまり適していません。で条件付きレンダリングを使用しGL_SAMPLES_PASSEDて、同じ効果を得ることができます。それらは同じ true/false 条件を使用します (つまりGL_SAMPLES_PASSED、サンプル数が > 0 の場合、条件付きは合格と見なされます)。

違いは、一方が他方よりも多くの情報を提供することです。any クエリの方が計算効率が高い場合があります。つまり、GL_SAMPLES_PASSED自明でGL_ANY_SAMPLES_PASSEDはないラスタライゼーションのオーバーヘッドが発生する可能性があります。繰り返しますが、そうではないかもしれません。ハードウェアによって異なります。

ニーズに合ったものを使用してください。サンプル数が必要な場合は、お問い合わせください。合格したかどうかだけを知る必要がある場合は、それを使用してください。

于 2013-09-05T08:52:21.280 に答える