GLSL фрагмент шейдера, значение мусора - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть простая программа, которая просто загружает шейдер и рисует треугольную полосу.

Когда я использую следующий фрагментный шейдер

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в обеих ветках (если и еще), получает меня мусор.

...