6

これは奇妙な問題です。フラグメント シェーダーに均一な色を渡そうとすると、コンパイル エラーが発生します。

uniform vec4 uniformColor;

void main(){
   gl_FragColor = uniformColor;
}

しかし、同じ均一な色を頂点シェーダーに渡してから、変化を介してフラグメント シェーダーに渡すと、正常に動作します..

    attribute vec4 position;
    uniform mat4 matrix;
    uniform vec4 uniformColor;
    varying vec4 fragmentColor; 
    void main()
    {
        gl_Position = matrix * position;
        fragmentColor = uniformColor;
    }

varying lowp vec4 fragmentColor;
void main()
{
  gl_FragColor = fragmentColor;
}

これはiOS上にあります。

オンラインから例をコピーして貼り付けるとエラーが発生するため、少し混乱しています。

4

2 に答える 2

3

私は同じ問題を抱えていましたが、それは実際には精度の欠落に関連していましたが、頂点シェーダーとフラグメントシェーダーの間でユニフォームが共有されている場合、同じ精度でなければならないという問題があります (少なくとも ES 2.0 では)。シェーダー間で共有されるため、これは理にかなっていると思います。

また、頂点シェーダのデフォルトhighpの精度は であるため、フラグメント シェーダのこのユニフォームの精度も次のようにする必要がありhighpます。

precision mediump float;
uniform highp vec4 uniformColor;

または、頂点シェーダーで精度を mediump に変更することもできます。

エラーメッセージは非常に有益でしたが、最終的に気付きました:Symbol uEcLightPos defined with different precision in vertex and fragment shaders.

于 2013-10-12T19:51:43.070 に答える