Я пытаюсь воспроизвести видео с альфа-каналом на заднем плане.К сожалению, когда я играю видео, показывается черное окно.Я думаю, это зависит от серверной части, которую использует 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;
}
"
}
}
У видео теперь есть альфа, но цвета не такие, как ожидалось, и, кроме того, два видео не синхронизированы идеально, поэтому иногда маска видна.
Что яделать неправильно?