此处描述了HLSLclip()
功能。
我打算在 OpenGL 中将其用于 alpha 截止。GLSL 中的等价物是否只是
if (gl_FragColor.a < cutoff)
{
discard;
}
还是有一些更有效的等价物?
OpenGL 没有这样的功能。它不需要一个。
还是有一些更有效的等价物?
该问题假定此条件语句的效率低于调用 HLSL 的clip
函数。它很有可能更有效(尽管如此,它还是一个完全的微优化)。clip
检查该值是否小于 0,如果是,则丢弃该片段。但是您不是针对零进行测试;您正在针对 进行测试cutoff
,这可能不是 0。因此,您必须clip
像这样调用(使用 GLSL 样式):clip(gl_FragColor.a - cutoff)
如果硬件不直接支持 clip ,那么您的调用相当于if(gl_FragColor.a - cutoff < 0) discard;
. 这是一个数学运算和一个条件测试。这比条件测试要慢。如果不是……驱动程序几乎肯定会重新排列您的代码以以这种方式进行条件测试。
条件会比clip
硬件有特定支持的唯一方法要慢,clip
并且驱动程序太愚蠢而无法转换if(gl_FragColor.a < cutoff) discard;
为clip(gl_FragColor.a - cutoff)
. 如果驱动程序那么愚蠢,如果它缺乏基本的针孔优化,那么您将面临比这更大的性能问题要处理。
简而言之:不用担心。