dup*_*per 10 opengl 3d graphics driver glsl
我在GLSL中制作高斯模糊着色器.由于卷积核是对称的,我存储了它的一半.我写:
vec3 glow = vec3(0.0);
for (int i = -WIDTH; i <= WIDTH; i++) {
uint j = abs(i);
glow += kernel[j] + texelFetch(u_glowTexture, coord + ivec2(i, 0), 0);
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这会使模糊略微偏向左侧.但后来我用以下内容替换第三行:
uint j = i * sign(i);
Run Code Online (Sandbox Code Playgroud)
而现在它的工作就像我期望的那样.我破了abs()
吗?我真的发现了驱动程序错误吗?
Abs() 从 1.30 版本开始支持整数,从 4.10 版本开始支持双精度。可能是版本和类型方面存在不明显的问题。尝试使用浮点数而不是整数进行调试。如果这没有帮助,则通过屏幕空间着色器隔离和调试 abs() 并将其输出用作片段颜色。
归档时间: |
|
查看次数: |
4993 次 |
最近记录: |