sorry, not using emulator at all.

10.02.2015 14:28, Luca Donaggio пишет:
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 <donag...@gmail.com <mailto:donag...@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


_______________________________________________
SailfishOS.org Devel mailing list
To unsubscribe, please send a mail to devel-unsubscr...@lists.sailfishos.org

_______________________________________________
SailfishOS.org Devel mailing list
To unsubscribe, please send a mail to devel-unsubscr...@lists.sailfishos.org

Reply via email to