GLSL片段着色器垃圾值

时间:2011-11-01 14:04:06

标签: 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);
    return;
}

我在条带中得到一个很好的渐变(v_Position设置为我在顶点着色器中传入的位置)。

当我使用以下片段着色器

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;
    }
}

我得到垃圾......就像一条带有绿色和黑色噪音的条带。

我不确定我是否遗漏了某些东西(我现在已经盯着这段代码了一段时间)...我不太明白如何或为什么添加条件,并在两个分支中设置gl_FragColor (如果是其他的话),让我变得垃圾。

0 个答案:

没有答案