【发布时间】:2015-04-05 19:51:47
【问题描述】:
我正在尝试使用 OpenGL 片段着色器,通过两次通道(一次水平,一次垂直)完成巨大的模糊 (300*300)。
我注意到将方向作为统一 (vec2) 传递比直接在代码中编写它(140 到 12 fps)慢大约 10 倍。
即:
vec2 dir = vec2(0, 1) / textureSize(tex, 0);
int size = 150;
for(int i = -size; i != size; ++i) {
float w = // compute weight here...
acc += w * texture(tex, + coord + vec2(i) * dir);
}
似乎比:
uniform vec2 dir;
/*
...
*/
int size = 150;
for(int i = -size; i != size; ++i) {
float w = // compute weight here...
acc += w * texture(tex, + coord + vec2(i) * dir);
}
用不同制服创建两个程序不会改变任何事情。
有谁知道为什么会有如此大的差异,为什么驱动程序没有看到“内联”目录可能更快?
编辑:将尺寸作为制服也有影响,但不如 dir。
如果您有兴趣查看它的外观(FRAPS 提供 fps 计数器):
快速说明:我在使用 OpenGL 4.2 和 glsl 420 的 nVidia 760M GTX 上运行。另外,puush 的 jpeg 负责图像中的颜色。
【问题讨论】: