3

頂点シェーダーとフラグメント シェーダーで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

4

1 に答える 1