6

HLSLclip()関数については、こちらで説明しています。

これを OpenGL のアルファ カットオフに使用するつもりです。GLSLで同等のものは単に

if (gl_FragColor.a < cutoff)
{
    discard;
}

または、より効率的な同等のものがありますか?

4

1 に答える 1

14

OpenGLにはそのような機能はありません。そして、それは必要ありません。

または、より効率的な同等のものはありますか?

clipこの質問は、この条件ステートメントがHLSLの関数を呼び出すよりも効率が悪いことを前提としています。それがより効率的である可能性は非常に高いです(それでも、それは完全なマイクロ最適化です)。clip値が0未満かどうかをチェックし、0未満の場合は、フラグメントを破棄します。しかし、あなたはゼロに対してテストしていません。に対してテストしていますがcutoff、おそらく0ではありません。したがって、次のように呼び出す必要がありますclip(GLSLスタイルを使用)。clip(gl_FragColor.a - cutoff)

クリップがハードウェアで直接サポートされていない場合、呼び出しはと同等if(gl_FragColor.a - cutoff < 0) discard;です。これは数学演算であり、条件付きテストです。これは、単なる条件付きテストよりも時間がかかります。そうでない場合は...ドライバーはほぼ確実にコードを再配置して、そのように条件付きテストを実行します。

条件付きが遅くなる唯一の方法はclip、ハードウェアが特定のサポートを持っていclip 、ドライバーが愚かすぎてに変わることができないif(gl_FragColor.a < cutoff) discard;場合clip(gl_FragColor.a - cutoff)です。ドライバーがそれほど愚かで、基本的なピンホール最適化が欠けている場合は、これよりも大きなパフォーマンスの問題に対処する必要があります。

つまり、心配する必要はありません。

于 2012-10-06T20:29:36.897 に答える