我有一个来自GLSL 330的非常简单的请求:
1+(2+1)*10
我有40多个这样的比较。
但是,这给我带来了很多麻烦,因为有人告诉我AND,NOT等语句占用大量视频内存,并且我正在为After Effects和碰巧的人开发一个插件使用它们没有强大的GPU(在大多数情况下-我进行了一项调查,其中大多数使用了中端GPU的移动版本)。所以我想问问你们是否还有使用AND的替代方法,甚至,因为我被告知片段着色器根本不喜欢在主分支中。
谢谢。
答案 0 :(得分:0)
像您这样的多路复用方案,您可以使用无分支编程。例如,您可以使用类似的东西。布尔运算符是“近似值”。
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 );