GLSL相当于HLSL clip()?

时间:2012-10-06 20:17:32

标签: glsl

HLSL clip()函数描述为here

我打算在OpenGL中使用它来进行alpha截断。 GLSL中的等价物是否只是

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

或者是否有一些更有效的等价物?

1 个答案:

答案 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;。如果驱动程序是愚蠢的,如果它没有基本的针孔优化,那么你就会遇到更大的性能问题。

简而言之:不要担心。