У меня есть простая программа, которая просто загружает шейдер и рисует треугольную полосу.
Когда я использую следующий фрагментный шейдер
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в обеих ветках (если и еще), получает меня мусор.