GLSL片段着色器垃圾值

GLSL片段着色器垃圾值,glsl,shader,Glsl,Shader,我有一个简单的程序,只加载一个着色器并绘制一个三角形条 当我使用以下片段着色器时 precision mediump float; varying vec2 v_Position; uniform float u_Intensity; uniform vec2 u_Range; uniform vec2 u_Touch; void main() { gl_FragColor = vec4 (v_Position.x / 300.0, 0.0, 0.0, 1.0);

我有一个简单的程序,只加载一个着色器并绘制一个三角形条

当我使用以下片段着色器时

precision mediump float; 

varying vec2 v_Position;

uniform float u_Intensity;
uniform vec2 u_Range;
uniform vec2 u_Touch;

void main()
{    
    gl_FragColor = vec4 (v_Position.x / 300.0, 0.0, 0.0, 1.0);
    return;
}
precision mediump float; 

varying vec2 v_Position;

uniform float u_Intensity;
uniform vec2 u_Range;
uniform vec2 u_Touch;

void main()
{    
    gl_FragColor = vec4 (u_Range.x / 300.0, 0.0, 0.0, 1.0);
    return;
}
我在条带中得到了一个很好的渐变(v_位置设置为我在顶点着色器中通过的位置)

当我使用以下片段着色器时

precision mediump float; 

varying vec2 v_Position;

uniform float u_Intensity;
uniform vec2 u_Range;
uniform vec2 u_Touch;

void main()
{    
    gl_FragColor = vec4 (v_Position.x / 300.0, 0.0, 0.0, 1.0);
    return;
}
precision mediump float; 

varying vec2 v_Position;

uniform float u_Intensity;
uniform vec2 u_Range;
uniform vec2 u_Touch;

void main()
{    
    gl_FragColor = vec4 (u_Range.x / 300.0, 0.0, 0.0, 1.0);
    return;
}
我得到一个纯色条(u_Range.x在这一点上是一个常数)

但是,当我尝试结合这两件事时:

precision mediump float; 

varying vec2 v_Position;

uniform float u_Intensity;
uniform vec2 u_Range;
uniform vec2 u_Touch;

void main()
{    

    if (v_Position.x < u_Range.x)
    {
        gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0);                                                                                  
        return;
    }
    else
    {
        gl_FragColor = vec4 (u_Range.x / 300.0, 0.0, 0.0, 1.0);
        return;
    }
}
precision mediump float;
可变vec2 v_位置;
均匀浮动u_强度;
均匀vec2u_范围;
均匀的vec2 u_触摸;
void main()
{    
if(v_位置.x
我收到垃圾。。。它就像一条带着绿色和黑色的噪音


我不确定我是否遗漏了什么(我已经盯着这段代码看了一段时间了)。。。我不太明白添加条件以及在两个分支(if和else)中设置gl_FragColor是如何或为什么会让我变成垃圾的。

您可以尝试其他驱动程序。我已经看到GLSL条件被驱动程序错误搞砸了。在glCompileShader和glLinkProgram调用后检查信息日志,看看是否有任何问题。告诉我们你正在使用什么GPU和驱动程序,因为这可能是相关的。日志是干净的(我没有收到任何警告),我正在尝试在iPhone4上运行这个。这个问题似乎大部分时间都在发生。也就是说,它工作过一次,但我不确定我改变了什么:\NVidia Cg编译器可以提供编译着色器的ARB_fragment_程序操作码的近似值。看一看:“return”语句是不必要的。很长,但是这些语句可能会混淆编译器,因为它们位于条件中。您可以尝试其他驱动程序。我已经看到GLSL条件被驱动程序错误搞砸了。在glCompileShader和glLinkProgram调用后检查信息日志,看看是否有任何问题。告诉我们你正在使用什么GPU和驱动程序,因为这可能是相关的。日志是干净的(我没有收到任何警告),我正在尝试在iPhone4上运行这个。这个问题似乎大部分时间都在发生。也就是说,它工作过一次,但我不确定我改变了什么:\NVidia Cg编译器可以提供编译着色器的ARB_fragment_程序操作码的近似值。看一看:“return”语句是不必要的。一个很长的语句,但是这些语句可能会使编译器感到困惑,因为它们位于条件语句中。