頂点シェーダーとフラグメント シェーダーでGLSLを使用しています。
頂点シェーダーhighp float
は [0,1] の範囲で a を出力します。
フラグメント シェーダーに到達すると、(三角形のエッジで) 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 によって生成されたイメージです。(ウィンドウの中央にある磁石色のピクセルを観察してください。)
Not-A-Number 値を除外しました。
GL_VERSION: 3.2.0 NVIDIA 450.51.06