Фрагмент шейдера GLSL не обрабатывает альфа-канал - PullRequest
0 голосов
/ 02 мая 2018

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