HLSL clip()
函数描述为here。
我打算在OpenGL中使用它来进行alpha截断。 GLSL中的等价物是否只是
if (gl_FragColor.a < cutoff)
{
discard;
}
或者是否有一些更有效的等价物?
答案 0 :(得分:12)
OpenGL没有这样的功能。而且它不需要一个。
或者是否有一些更有效的等价物?
该问题假设此条件语句的效率低于调用HLSL的clip
函数。它很可能更多有效(尽管那时,它是一个完全的微优化)。 clip
检查该值是否小于0,如果是,则丢弃该片段。但是你不是测试反对零;你正在测试cutoff
,这可能不是0.所以,你必须像这样调用clip
(使用GLSL风格):clip(gl_FragColor.a - cutoff)
如果硬件不直接支持剪辑,则您的通话等同于if(gl_FragColor.a - cutoff < 0) discard;
。这是一个数学运算和一个条件测试。这比条件测试要慢。如果不是......驱动程序几乎肯定会重新排列代码以进行条件测试。
条件慢于clip
的唯一方法是,如果硬件具有对clip
和的特定支持,则驱动程序过于愚蠢而无法转向{{1}进入if(gl_FragColor.a < cutoff) discard;
。如果驱动程序是愚蠢的,如果它没有基本的针孔优化,那么你就会遇到更大的性能问题。
简而言之:不要担心。