QML-видео с альфа-каналом - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь воспроизвести видео с альфа-каналом на заднем плане.К сожалению, когда я играю видео, показывается черное окно.Я думаю, это зависит от серверной части, которую использует Qt в Windows.

Поэтому я попытался применить эффект шейдера, объединяя два видео и используя одно в качестве маски для другого.

Вот мой QMLкод:

Rectangle{
    width:462
    height: 347
    color: "transparent"


    Video {
        id: button
        source: "file:/F:/BlackBuffalo/gioco/symwin_0.mp4"
        anchors.fill: parent
        loops:MediaPlayer.Infinite
        layer.enabled: true
        layer.smooth: true

        autoPlay: true
        opacity: 0.0
    }


    Video {
        id: _mask
        source: "file:/F:/BlackBuffalo/gioco/symwin_0_mask.mp4"
        anchors.fill: parent
        loops:MediaPlayer.Infinite
        autoPlay: true

    }
    layer.enabled: true
    layer.samplerName: "maskSource"
    layer.effect: ShaderEffect {
        property variant source: button
        fragmentShader: "
                varying highp vec2 qt_TexCoord0;
                uniform highp float qt_Opacity;
                uniform lowp sampler2D source;
                uniform lowp sampler2D maskSource;
                void main(void) {
                    gl_FragColor = texture2D(source, qt_TexCoord0) * (texture2D(maskSource, qt_TexCoord0).r) * qt_Opacity;
                }
            "
    }


}

У видео теперь есть альфа, но цвета не такие, как ожидалось, и, кроме того, два видео не синхронизированы идеально, поэтому иногда маска видна.

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

...