Seltsame Alpha-Blending-Ergebnisse mit ShaderEffectItem
Ich versuche, mit eine einfache Alphamaske auf ein QML-Element anzuwendenShaderEffectItem
.
Hier ist ein minimales (nicht funktionierendes) Beispiel: Ich habe einen Rot-Weiß-Verlauf als Hintergrund und möchte ein grünes 200x200-Quadrat darüber zeichnen. Die Alpha-Maske für dieses Quadrat sollte am linken Rand 0,0 und am rechten Rand 1,0 betragen, sodass sie am linken Rand transparent sein sollte.
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;
}
"
}
}
Ich habe die folgende Ausgabe erwartet (gezeichnet mit GIMP):
Aber das ist tatsächlich gezeigt:
Was mache ich falsch?
Ich benutzeqmlviewer (Qt 4.8.2) zum Anzeigen der QML-Datei mit dem-opengl
Option, um den Shader-Effekt zu aktivieren.
Vielleicht hängt das damit zusammenDieses seltsame Verhalten beim Alpha-Blending auf QGLFramebufferObjects Ich fand vor einigen Wochen ...