Странные результаты альфа-смешивания с ShaderEffectItem

Я пытаюсь применить простую альфа-маску к элементу QML, используяShaderEffectItem.

Вот минимальный (не) рабочий пример: в качестве фона у меня есть градиент от красного к белому, и я хочу нарисовать зеленый квадрат 200х200 поверх него. Альфа-маска для этого квадрата должна быть 0,0 слева и 1,0 справа, поэтому она должна быть прозрачной на левой границе.

import QtQuick 1.1
import Qt.labs.shaders 1.0

Rectangle {
    width: 300
    height: 300

    id: wrapper

    gradient: Gradient {
        GradientStop { position: 0.0; color: "red" }
        GradientStop { position: 1.0; color: "white" }
    }

    Rectangle {
        id: square
        anchors.centerIn: parent
        width: 200
        height: 200
        color: "green"
    }

    ShaderEffectItem {
        anchors.centerIn: parent
        width: 200
        height: 200

        property variant source: ShaderEffectSource {
            sourceItem: square
            hideSource: true
        }

        fragmentShader: "
        varying vec2 qt_TexCoord0;
        uniform sampler2D source;
        void main(void)
        {
            vec4 sourceColor = texture2D(source, qt_TexCoord0);
            float alpha = qt_TexCoord0.x; // = 0.0 at left, 1.0 at right border
            sourceColor.a *= alpha;       // apply alpha mask
            gl_FragColor = sourceColor;
        }
        "
    }
}

Я ожидал следующий вывод (нарисованный с GIMP):

Но это на самом деле показано:

Что я делаю неправильно?

я используюqmlviewer (Qt 4.8.2), чтобы отобразить файл QML с-opengl опция для включения эффекта шейдера.

Может быть, это связано сэто странное поведение с альфа-смешиванием на QGLFramebufferObjects Я нашел несколько недель назад ...

Ответы на вопрос(1)

Ваш ответ на вопрос