HLSLclip()
関数については、こちらで説明しています。
これを OpenGL のアルファ カットオフに使用するつもりです。GLSLで同等のものは単に
if (gl_FragColor.a < cutoff)
{
discard;
}
または、より効率的な同等のものがありますか?
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)
です。ドライバーがそれほど愚かで、基本的なピンホール最適化が欠けている場合は、これよりも大きなパフォーマンスの問題に対処する必要があります。
つまり、心配する必要はありません。