[SailfishDevel] Different behaviour of ShaderEffectSource in emulator vs. device
Luca Donaggio
donaggio at gmail.com
Tue Feb 10 09:28:04 UTC 2015
Anybody is willing to try my test code and confirm or deny my finding?
On Fri, Feb 6, 2015 at 2:12 PM, Luca Donaggio <donaggio at gmail.com> wrote:
> The following code works fine in Emulator, changing the gradient of the
> Rectangle correctly updates the nested ShaderEffectSource and it is
> reflected on the ShaderEffect which uses it as its texture:
>
> Page {
> id: page
>
> SilicaFlickable {
> anchors.fill: parent
>
> contentHeight: column.height
>
> Column {
> id: column
>
> anchors { top: parent.top; left: parent.left; right:
> parent.right; leftMargin: Theme.paddingLarge; rightMargin:
> Theme.paddingLarge; }
> spacing: Theme.paddingLarge
>
> PageHeader {
> title: qsTr("ShaderEffect Test")
> }
>
> Row {
> anchors.horizontalCenter: parent.horizontalCenter
> spacing: Theme.paddingLarge
>
> Column {
> spacing: Theme.paddingSmall
>
> Rectangle {
> id: gradientSource
>
> property list<Gradient> gradients: [
> Gradient {
> GradientStop { position: 0.0; color:
> "black"; }
> GradientStop { position: 1.0; color:
> "blue"; }
> },
>
> Gradient {
> GradientStop { position: 0.0; color:
> "black"; }
> GradientStop { position: 1.0; color:
> "red"; }
> }
> ]
>
> width: 100
> height: 100
>
> gradient: gradients[0]
>
> ShaderEffectSource {
> id: gradientTexture
>
> anchors.fill: parent
> sourceItem: gradientSource
> hideSource: false
> live: true
> }
> }
>
> Label {
> font.pixelSize: Theme.fontSizeExtraSmall
> wrapMode: Text.WordWrap
> text: "Rectangle\nShaderEffectSource"
> }
> }
>
> Column {
> spacing: Theme.paddingSmall
>
> ShaderEffect {
> property variant source: gradientTexture
>
> width: 100
> height: 100
>
> blending: false
> cullMode: ShaderEffect.BackFaceCulling
> fragmentShader: "
> varying highp vec2 qt_TexCoord0;
> uniform lowp float qt_Opacity;
> uniform sampler2D source;
>
> void main() {
> gl_FragColor = texture2D(source,
> qt_TexCoord0) * qt_Opacity;
> }"
> }
>
> Label {
> font.pixelSize: Theme.fontSizeExtraSmall
> text: "ShaderEffect"
> }
> }
> }
>
> Button {
> anchors.horizontalCenter: parent.horizontalCenter
> text: "Blue gradient"
>
> onClicked: gradientSource.gradient =
> gradientSource.gradients[0]
> }
>
> Button {
> anchors.horizontalCenter: parent.horizontalCenter
> text: "Red gradient"
>
> onClicked: gradientSource.gradient =
> gradientSource.gradients[1]
> }
> }
> }
> }
>
> It doesn't work on device though (changing Reactangle's gradient doesn't
> update the ShaderEffectSource).
>
> Un-nesting the ShaderEffectSource from its source item (the Rectangle)
> works fine both on emulator and on device:
>
> Page {
> id: page
>
> SilicaFlickable {
> anchors.fill: parent
>
> contentHeight: column.height
>
> Column {
> id: column
>
> anchors { top: parent.top; left: parent.left; right:
> parent.right; leftMargin: Theme.paddingLarge; rightMargin:
> Theme.paddingLarge; }
> spacing: Theme.paddingLarge
>
> PageHeader {
> title: qsTr("ShaderEffect Test")
> }
>
> Row {
> anchors.horizontalCenter: parent.horizontalCenter
> spacing: Theme.paddingLarge
>
> Column {
> spacing: Theme.paddingSmall
>
> Rectangle {
> id: gradientSource
>
> property list<Gradient> gradients: [
> Gradient {
> GradientStop { position: 0.0; color:
> "black"; }
> GradientStop { position: 1.0; color:
> "blue"; }
> },
>
> Gradient {
> GradientStop { position: 0.0; color:
> "black"; }
> GradientStop { position: 1.0; color:
> "red"; }
> }
> ]
>
> width: 100
> height: 100
>
> gradient: gradients[0]
> }
>
> Label {
> font.pixelSize: Theme.fontSizeExtraSmall
> text: "Rectangle"
> }
> }
>
> Column {
> spacing: Theme.paddingSmall
>
> ShaderEffectSource {
> id: gradientTexture
>
> width: 100
> height: 100
> sourceItem: gradientSource
> hideSource: false
> live: true
> }
>
> Label {
> font.pixelSize: Theme.fontSizeExtraSmall
> text: "ShaderEffectSource"
> }
> }
>
> Column {
> spacing: Theme.paddingSmall
>
> ShaderEffect {
> property variant source: gradientTexture
>
> width: 100
> height: 100
>
> blending: false
> cullMode: ShaderEffect.BackFaceCulling
> fragmentShader: "
> varying highp vec2 qt_TexCoord0;
> uniform lowp float qt_Opacity;
> uniform sampler2D source;
>
> void main() {
> gl_FragColor = texture2D(source,
> qt_TexCoord0) * qt_Opacity;
> }"
> }
>
> Label {
> font.pixelSize: Theme.fontSizeExtraSmall
> text: "ShaderEffect"
> }
> }
> }
>
> Button {
> anchors.horizontalCenter: parent.horizontalCenter
> text: "Blue gradient"
>
> onClicked: gradientSource.gradient =
> gradientSource.gradients[0]
> }
>
> Button {
> anchors.horizontalCenter: parent.horizontalCenter
> text: "Red gradient"
>
> onClicked: gradientSource.gradient =
> gradientSource.gradients[1]
> }
> }
> }
> }
>
> Is it a bug?
>
> --
> Luca Donaggio
>
--
Luca Donaggio
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.sailfishos.org/pipermail/devel/attachments/20150210/8d2b1f17/attachment-0001.html>
More information about the Devel
mailing list