我正在使用一个顶点着色器和片段着色器来编写GLSL程序。
在顶点着色器中,输出的highp float
范围是[0,1]。
但当它到达片段着色器时,我看到三角形边缘处的值超过了1.1!
如果我要解决这个问题,我可以...
- 要么禁用MSAA。
- 要么使用GLSL插值限定符
flat
来禁用插值。
如果启用了MSAA,一个被夹紧在0到1之间且具有高精度的浮点数怎样会作为一个远大于1的值到达片段着色器中呢?
顶点着色器代码:
out highp float lightcontrib2;
...
lightcontrib2 = clamp( irrad, 0.0, 1.0 );
片元着色器代码:
in highp float lightcontrib2;
...
if (lightcontrib2>1.1) { fragColor = vec4(1,0,1,1); return; }
使用MSAA 4x,在OpenGL中生成的图像如下所示(观察窗口中心处品红色的像素)。
我已排除非数字值。
GL_VERSION: 3.2.0 NVIDIA 450.51.06