【发布时间】:2019-02-28 06:35:35
【问题描述】:
我有一个来自 GLSL 330 的非常简单的请求:
if (colorOut.r <= 1.0 && colorOut.r > 0.7)
{
colorOut.r=*color_1.r;
}
我有超过 40 次这样的比较。
但是,这给我带来了麻烦,因为有人告诉我 AND、NOT 等语句会占用大量视频内存,我正在为 After Effects 开发一个插件,而那些碰巧使用它们没有强大的 GPU(在大多数情况下——我做过一项调查,其中大多数使用移动版本的中端 GPU)。所以我想我会问你们是否有可能替代使用 AND 或者即使,因为我被告知片段着色器根本不喜欢 if 在主分支中。
谢谢。
【问题讨论】:
-
您说“AND、NOT 等语句占用大量视频内存”。这是不正确的,简单的布尔运算不需要任何大量内存(如果您有很多内存,它们可能需要大量的计算时间,但 VRAM 不需要)。执行路径的分歧(例如 if 语句)可能会导致显着减速,因为将采用的路径不可预测,因此无法有效利用缓存等。请参阅this question(其中大部分也适用于 GPU)。
标签: opengl glsl fragment-shader