Я пытаюсь сделать несколько простых градиентных шейдеров для программы. Ничего особенного, просто укажите начальный и конечный цвет и интерполируйте между ними. Кажется, все работает нормально, за исключением альфа-канала. Кажется, что если цвет не является чёрным (чёрный с альфа 0), альфа-канал либо игнорируется, либо устанавливается на 1.
Цвета ввода
Что я ожидаю увидеть
Что я на самом деле вижу
Фрагмент шейдера:
uniform mediump vec4 TopColor;
uniform mediump vec4 BottomColor;
uniform mediump float ViewHeight;
uniform mediump vec4 kzViewport;
void main()
{
precision mediump float;
float centerY = ViewHeight / 2.0;
float r = abs(gl_FragCoord.y - centerY) / centerY;
gl_FragColor = mix(TopColor, BottomColor, r);
}
Вершинный шейдер:
attribute vec3 kzPosition;
uniform highp mat4 kzProjectionCameraWorldMatrix;
void main()
{
precision mediump float;
gl_Position = kzProjectionCameraWorldMatrix * vec4(kzPosition.xyz, 1.0);
}