将统一颜色传递给片段着色器(openGL ES 2.0)

rez*_*eza 5 glsl uniform varying ios opengl-es-2.0

这是一个奇怪的问题.如果我尝试将统一颜色传递给片段着色器,则会出现编译错误

uniform vec4 uniformColor;

void main(){
   gl_FragColor = uniformColor;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将相同的均匀颜色传递给顶点着色器,然后通过变化将其传递给片段着色器,那么它可以正常工作.

    attribute vec4 position;
    uniform mat4 matrix;
    uniform vec4 uniformColor;
    varying vec4 fragmentColor; 
    void main()
    {
        gl_Position = matrix * position;
        fragmentColor = uniformColor;
    }
Run Code Online (Sandbox Code Playgroud)

varying lowp vec4 fragmentColor;
void main()
{
  gl_FragColor = fragmentColor;
}
Run Code Online (Sandbox Code Playgroud)

这是在iOS上.

我有点困惑,因为从网上复制和粘贴示例会给我带来错误.

小智 4

OpenGL ES 中的片段着色器没有默认的浮点精度限定符。使用任何浮点指针变量都需要精度限定符 - 无论它是统一变量、变化变量还是局部变量。顶点着色器有默认精度,因此您不需要在其中添加任何限定符。

在 OpenGL 中,不需要精度限定符,这就是为什么您指向的示例不包含它们。

尝试将其添加到着色器的顶部,应该没问题:

precision mediump float;
Run Code Online (Sandbox Code Playgroud)