我有一个来自GLSL 330的非常简单的请求:
if (colorOut.r <= 1.0 && colorOut.r > 0.7)
{
colorOut.r=*color_1.r;
}
我有40多个这样的比较。
然而,这给我带来了一个麻烦的世界,因为我被告知AND,NOT等声明会占用大量的视频内存,而我正在为After Effects开发一个插件,而碰巧使用它们的人则不会没有强大的GPU(大多数情况下 - 我做过调查,大多数都使用移动版的中端GPU)。所以我想我会问你们是否有可能替代使用AND或者甚至是,因为我被告知片段着色器不喜欢在主分支中。
谢谢。
像您这样的多路复用场景,您可以使用无分支编程。例如,你可以使用这样的东西。布尔运算符是“近似的”。
colorOut.r = mix(colorOut.r, (colorOut.r*color_1.r),
( clamp(pow(1-colorOut.r, 20), 0, 1)
* clamp(pow(colorOut.r-0.7, 20), 0, 1) ) );
请注意,三元组通常不会导致太多问题,这在资源上应该很容易,因为它不会导致分支分叉:
colorOut.r = mix(colorOut.r, (colorOut.r*color_1.r),
( colorOut.r <= 1 && colorOut.r > 0.7 ? 1 : 0 );