[vlc-commits] [Git][videolan/vlc][master] 6 commits: qt: add `Noise.vert`

Steve Lhomme (@robUx4) gitlab at videolan.org
Sat Dec 21 14:51:11 UTC 2024



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
f18fbef3 by Fatih Uzunoglu at 2024-12-21T14:38:05+00:00
qt: add `Noise.vert`

- - - - -
193a1843 by Fatih Uzunoglu at 2024-12-21T14:38:05+00:00
qml: do not depend on dummy texture in Noise.frag

We can use `gl_FragCoord` as seed.

- - - - -
35850740 by Fatih Uzunoglu at 2024-12-21T14:38:05+00:00
qt: introduce `QSGRectangularNoiseNode`

- - - - -
d47b451f by Fatih Uzunoglu at 2024-12-21T14:38:05+00:00
qt: introduce `NoiseRectangle`

- - - - -
84e0798a by Fatih Uzunoglu at 2024-12-21T14:38:05+00:00
qt: register `NoiseRectangle`

- - - - -
85d71854 by Fatih Uzunoglu at 2024-12-21T14:38:05+00:00
qml: use `NoiseRectangle` instead of `ShaderEffect` in `FrostedGlassEffect.qml`

- - - - -


12 changed files:

- modules/gui/qt/Makefile.am
- modules/gui/qt/maininterface/mainui.cpp
- modules/gui/qt/meson.build
- modules/gui/qt/shaders/Noise.frag
- + modules/gui/qt/shaders/Noise.vert
- modules/gui/qt/shaders/meson.build
- modules/gui/qt/shaders/shaders.qrc
- + modules/gui/qt/util/qsgrectangularnoisenode.cpp
- + modules/gui/qt/util/qsgrectangularnoisenode.hpp
- + modules/gui/qt/widgets/native/noiserectangle.cpp
- + modules/gui/qt/widgets/native/noiserectangle.hpp
- modules/gui/qt/widgets/qml/FrostedGlassEffect.qml


Changes:

=====================================
modules/gui/qt/Makefile.am
=====================================
@@ -341,6 +341,8 @@ libqt_plugin_la_SOURCES = \
 	util/model_recovery_agent.hpp \
 	util/vlcqtmessagehandler.cpp \
 	util/vlcqtmessagehandler.hpp \
+	util/qsgrectangularnoisenode.cpp \
+	util/qsgrectangularnoisenode.hpp \
 	widgets/native/animators.cpp \
 	widgets/native/animators.hpp \
 	widgets/native/customwidgets.cpp widgets/native/customwidgets.hpp \
@@ -356,7 +358,8 @@ libqt_plugin_la_SOURCES = \
 	widgets/native/qvlcframe.hpp \
 	widgets/native/searchlineedit.cpp widgets/native/searchlineedit.hpp \
 	widgets/native/viewblockingrectangle.cpp widgets/native/viewblockingrectangle.hpp \
-	widgets/native/doubleclickignoringitem.hpp
+	widgets/native/doubleclickignoringitem.hpp \
+	widgets/native/noiserectangle.cpp widgets/native/noiserectangle.hpp
 
 # Meta-object compilation
 
@@ -501,7 +504,8 @@ nodist_libqt_plugin_la_SOURCES = \
 	widgets/native/navigation_attached.moc.cpp \
 	widgets/native/mlfolderseditor.moc.cpp \
 	widgets/native/searchlineedit.moc.cpp \
-	widgets/native/viewblockingrectangle.moc.cpp
+	widgets/native/viewblockingrectangle.moc.cpp \
+	widgets/native/noiserectangle.moc.cpp
 
 nodist_libqt_plugin_la_SOURCES += \
 	dialogs/extended/ui_equalizer.h \
@@ -1338,6 +1342,7 @@ libqt_plugin_la_SHADER := shaders/FadingEdge.frag \
                           shaders/FadingEdgeX.vert \
                           shaders/FadingEdgeY.vert \
                           shaders/Noise.frag \
+                          shaders/Noise.vert \
                           shaders/RectFilter.frag \
                           shaders/SubTexture.vert \
                           shaders/PlayerBlurredBackground.frag \


=====================================
modules/gui/qt/maininterface/mainui.cpp
=====================================
@@ -62,6 +62,7 @@
 #include "widgets/native/csdthemeimage.hpp"
 #include "widgets/native/navigation_attached.hpp"
 #include "widgets/native/viewblockingrectangle.hpp"
+#include "widgets/native/noiserectangle.hpp"
 #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
 #include "widgets/native/doubleclickignoringitem.hpp"
 #else
@@ -347,6 +348,7 @@ void MainUI::registerQMLTypes()
         // @uri VLC.Widgets
         qmlRegisterType<CSDThemeImage>(uri, versionMajor, versionMinor, "CSDThemeImage");
         qmlRegisterType<ViewBlockingRectangle>( uri, versionMajor, versionMinor, "ViewBlockingRectangle" );
+        qmlRegisterType<NoiseRectangle>(uri, versionMajor, versionMinor, "NoiseRectangle");
 
         qmlRegisterModule(uri, versionMajor, versionMinor);
         qmlProtectModule(uri, versionMajor);


=====================================
modules/gui/qt/meson.build
=====================================
@@ -151,6 +151,7 @@ moc_headers = files(
     'widgets/native/mlfolderseditor.hpp',
     'widgets/native/searchlineedit.hpp',
     'widgets/native/viewblockingrectangle.hpp',
+    'widgets/native/noiserectangle.hpp',
 )
 
 if host_system == 'windows'
@@ -474,6 +475,8 @@ some_sources = files(
     'util/model_recovery_agent.hpp',
     'util/vlcqtmessagehandler.cpp',
     'util/vlcqtmessagehandler.hpp',
+    'util/qsgrectangularnoisenode.cpp',
+    'util/qsgrectangularnoisenode.hpp',
     'widgets/native/animators.cpp',
     'widgets/native/animators.hpp',
     'widgets/native/customwidgets.cpp',
@@ -493,6 +496,8 @@ some_sources = files(
     'widgets/native/viewblockingrectangle.cpp',
     'widgets/native/viewblockingrectangle.hpp',
     'widgets/native/doubleclickignoringitem.hpp',
+    'widgets/native/noiserectangle.cpp',
+    'widgets/native/noiserectangle.hpp',
 )
 
 if host_system == 'windows'


=====================================
modules/gui/qt/shaders/Noise.frag
=====================================
@@ -18,8 +18,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-layout(location = 0) in vec2 qt_TexCoord0;
-
 layout(location = 0) out vec4 fragColor;
 
 layout(std140, binding = 0) uniform buf {
@@ -33,7 +31,7 @@ float rand(vec2 co){
 }
 
 void main() {
-   float r = rand(qt_TexCoord0) - 0.5;
+   float r = rand(gl_FragCoord.xy * gl_FragCoord.wz) - 0.5;
    vec4 noise = vec4(r,r,r,1.0) * strength;
    fragColor = noise * qt_Opacity;
 }


=====================================
modules/gui/qt/shaders/Noise.vert
=====================================
@@ -0,0 +1,32 @@
+#version 440
+
+/*****************************************************************************
+ * Copyright (C) 2024 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+layout(location = 0) in vec4 qt_Vertex;
+
+layout(std140, binding = 0) uniform buf {
+  mat4 qt_Matrix;
+  float qt_Opacity;
+  float strength;
+};
+
+void main()
+{
+    gl_Position = qt_Matrix * qt_Vertex;
+}


=====================================
modules/gui/qt/shaders/meson.build
=====================================
@@ -11,6 +11,7 @@ shader_sources = [
     'FadingEdgeX.vert',
     'FadingEdgeY.vert',
     'Noise.frag',
+    'Noise.vert',
     'RectFilter.frag',
     'SubTexture.vert',
     'PlayerBlurredBackground.frag',


=====================================
modules/gui/qt/shaders/shaders.qrc
=====================================
@@ -5,6 +5,7 @@
         <file alias="FadingEdgeX.vert.qsb">FadingEdgeX.vert.qsb</file>
         <file alias="FadingEdgeY.vert.qsb">FadingEdgeY.vert.qsb</file>
         <file alias="Noise.frag.qsb">Noise.frag.qsb</file>
+        <file alias="Noise.vert.qsb">Noise.vert.qsb</file>
         <file alias="RectFilter.frag.qsb">RectFilter.frag.qsb</file>
         <file alias="SubTexture.vert.qsb">SubTexture.vert.qsb</file>
         <file alias="PlayerBlurredBackground.frag.qsb">PlayerBlurredBackground.frag.qsb</file>


=====================================
modules/gui/qt/util/qsgrectangularnoisenode.cpp
=====================================
@@ -0,0 +1,226 @@
+/*****************************************************************************
+ * Copyright (C) 2024 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#include "qsgrectangularnoisenode.hpp"
+
+#include <QSGMaterial>
+#include <QSGGeometry>
+#include <QSGMaterialShader>
+
+// Sometimes culling can cause issues with the Qt renderer
+#define BACKFACE_CULLING 1
+
+class QSGRectangularNoiseMaterialShader : public QSGMaterialShader
+{
+public:
+    QSGRectangularNoiseMaterialShader()
+    {
+        setShaderFileName(VertexStage, QStringLiteral(":/shaders/Noise.vert.qsb"));
+        setShaderFileName(FragmentStage, QStringLiteral(":/shaders/Noise.frag.qsb"));
+
+        // Indicate that we want to update the pipeline state, as we
+        // want an extraordinary blending algorithm/factor:
+        setFlag(QSGMaterialShader::UpdatesGraphicsPipelineState);
+    }
+
+    bool updateGraphicsPipelineState(QSGMaterialShader::RenderState &, QSGMaterialShader::GraphicsPipelineState *ps, QSGMaterial *, QSGMaterial *) override
+    {
+        /*  The default blending operations of the scene graph renderer are:
+         *  QRhiGraphicsPipeline::BlendFactor srcColor = QRhiGraphicsPipeline::One;
+         *  QRhiGraphicsPipeline::BlendFactor dstColor = QRhiGraphicsPipeline::OneMinusSrcAlpha;
+         *  QRhiGraphicsPipeline::BlendFactor srcAlpha = QRhiGraphicsPipeline::One;
+         *  QRhiGraphicsPipeline::BlendFactor dstAlpha = QRhiGraphicsPipeline::OneMinusSrcAlpha;
+         *  QRhiGraphicsPipeline::BlendOp opColor = QRhiGraphicsPipeline::Add;
+         *  QRhiGraphicsPipeline::BlendOp opAlpha = QRhiGraphicsPipeline::Add;
+         *
+         *  For the noise node, we want blend factors (One, One), instead of
+         *  (One, OneMinusSrcAlpha). Here, we specify the factors that we
+         *  want to use.
+         */
+        bool changeMade = false;
+
+#if BACKFACE_CULLING
+        if (Q_LIKELY(ps->cullMode != GraphicsPipelineState::CullBack))
+        {
+            // Culling is not necessary, but this rectangle will probably
+            // not be rotated more than 90 degrees in z axis, so we can
+            // have backface culling as optimization.
+            ps->cullMode = GraphicsPipelineState::CullBack;
+            changeMade = true;
+        }
+#endif
+
+        if (Q_UNLIKELY(!ps->blendEnable)) // usually blending is enabled by other materials
+        {
+            ps->blendEnable = true;
+            changeMade = true;
+        }
+
+        if (Q_UNLIKELY(ps->srcColor != GraphicsPipelineState::One))
+        {
+            ps->srcColor = GraphicsPipelineState::One;
+            changeMade = true;
+        }
+
+        if (Q_LIKELY(ps->dstColor != GraphicsPipelineState::One))
+        {
+            ps->dstColor = GraphicsPipelineState::One;
+            changeMade = true;
+        }
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
+        // Qt 6.5.0 brings ability to use separate factor for alpha
+
+        if (Q_UNLIKELY(ps->srcAlpha != GraphicsPipelineState::One))
+        {
+            ps->srcAlpha = GraphicsPipelineState::One;
+            changeMade = true;
+        }
+
+        if (Q_LIKELY(ps->dstAlpha != GraphicsPipelineState::One))
+        {
+            ps->dstAlpha = GraphicsPipelineState::One;
+            changeMade = true;
+        }
+#endif
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+        // Before Qt 6.8.0, it is not possible to adjust the blend algorithm.
+        // But it is not really important, because the default has always been addition.
+        // And for the noise we want addition as well.
+
+        if (Q_UNLIKELY(ps->opColor != GraphicsPipelineState::BlendOp::Add))
+        {
+            ps->opColor = GraphicsPipelineState::BlendOp::Add;
+            changeMade = true;
+        }
+
+        if (Q_UNLIKELY(ps->opAlpha != GraphicsPipelineState::BlendOp::Add))
+        {
+            ps->opAlpha = GraphicsPipelineState::BlendOp::Add;
+            changeMade = true;
+        }
+#endif
+
+        return changeMade;
+    }
+
+    bool updateUniformData(RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) override
+    {
+        assert(dynamic_cast<QSGRectangularNoiseMaterial*>(newMaterial));
+        assert(!oldMaterial || dynamic_cast<QSGRectangularNoiseMaterial*>(oldMaterial));
+
+        qintptr offset = 0;
+        QByteArray *buf = state.uniformData();
+
+        // qt_Matrix:
+        if (state.isMatrixDirty())
+        {
+            const QMatrix4x4 m = state.combinedMatrix();
+            const size_t size = 64;
+            memcpy(buf->data() + offset, m.constData(), size);
+            offset += size;
+        }
+
+        // qt_Opacity:
+        if (state.isOpacityDirty())
+        {
+            // For noise, maybe instead of the scene graph inherited opacity
+            // provided here, direct opacity should be used?
+            const float opacity = state.opacity();
+            const size_t size = 4;
+            memcpy(buf->data() + offset, &opacity, size);
+            offset += size;
+        }
+
+        // Noise strength:
+        const auto oldNoiseMaterial = static_cast<const QSGRectangularNoiseMaterial *>(oldMaterial);
+        const auto newNoiseMaterial = static_cast<const QSGRectangularNoiseMaterial *>(newMaterial);
+        if (!oldMaterial || (oldNoiseMaterial->strength() != newNoiseMaterial->strength()))
+        {
+            const float strength = newNoiseMaterial->strength();
+            const size_t size = 4;
+            memcpy(buf->data() + offset, &strength, size);
+            offset += size;
+        }
+
+        return offset > 0;
+    }
+};
+
+QSGRectangularNoiseMaterial::QSGRectangularNoiseMaterial()
+{
+    setFlag(QSGMaterial::Blending);
+}
+
+QSGMaterialType *QSGRectangularNoiseMaterial::type() const
+{
+    static QSGMaterialType type;
+    return &type;
+}
+
+QSGMaterialShader *QSGRectangularNoiseMaterial::createShader(QSGRendererInterface::RenderMode) const
+{
+    return new QSGRectangularNoiseMaterialShader;
+}
+
+int QSGRectangularNoiseMaterial::compare(const QSGMaterial *other) const
+{
+    assert(dynamic_cast<const QSGRectangularNoiseMaterial *>(other));
+    return static_cast<const QSGRectangularNoiseMaterial*>(other)->strength() - strength();
+}
+
+QSGRectangularNoiseNode::QSGRectangularNoiseNode()
+    : m_geometry(QSGGeometry::defaultAttributes_Point2D(), 4)
+{
+    QSGGeometry::updateRectGeometry(&m_geometry, QRectF());
+    setMaterial(&m_material);
+    setGeometry(&m_geometry);
+}
+
+void QSGRectangularNoiseNode::setRect(const QRectF &_rect)
+{
+    if (rect() == _rect)
+        return;
+
+    // We can use this instead of setting the geometry ourselves:
+    QSGGeometry::updateRectGeometry(&m_geometry, _rect);
+    markDirty(QSGNode::DirtyGeometry);
+}
+
+QRectF QSGRectangularNoiseNode::rect() const
+{
+    const QSGGeometry::Point2D *vertexData = m_geometry.vertexDataAsPoint2D();
+    return QRectF(vertexData[0].x, vertexData[0].y,
+                  vertexData[3].x - vertexData[0].x,
+                  vertexData[3].y - vertexData[0].y);
+}
+
+float QSGRectangularNoiseNode::strength() const
+{
+    return m_material.strength();
+}
+
+void QSGRectangularNoiseNode::setStrength(float strength)
+{
+    if (qFuzzyCompare(m_material.strength(), strength))
+        return;
+
+    m_material.setStrength(strength);
+    markDirty(QSGNode::DirtyMaterial);
+}
+


=====================================
modules/gui/qt/util/qsgrectangularnoisenode.hpp
=====================================
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * Copyright (C) 2024 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#ifndef QSGRECTANGULARNOISENODE_HPP
+#define QSGRECTANGULARNOISENODE_HPP
+
+#include <QSGGeometryNode>
+#include <QSGGeometry>
+#include <QSGMaterial>
+
+class QSGRectangularNoiseMaterial : public QSGMaterial
+{
+public:
+    QSGRectangularNoiseMaterial();
+
+    float strength() const { return m_strength; };
+    void setStrength(qreal strength) { m_strength = strength; };
+
+    QSGMaterialType *type() const override;
+
+    QSGMaterialShader *createShader(QSGRendererInterface::RenderMode renderMode) const override;
+    int compare(const QSGMaterial *other) const override;
+
+private:
+    float m_strength = 0.2;
+};
+
+class QSGRectangularNoiseNode : public QSGGeometryNode
+{
+public:
+    QSGRectangularNoiseNode();
+
+    void setRect(const QRectF &rect);
+
+    QRectF rect() const;
+
+    float strength() const;
+    void setStrength(float strength);
+
+private:
+    QSGGeometry m_geometry;
+    QSGRectangularNoiseMaterial m_material;
+};
+
+#endif // QSGRECTANGULARNOISENODE_HPP


=====================================
modules/gui/qt/widgets/native/noiserectangle.cpp
=====================================
@@ -0,0 +1,81 @@
+/*****************************************************************************
+ * Copyright (C) 2024 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#include "noiserectangle.hpp"
+
+#include "util/qsgrectangularnoisenode.hpp"
+
+NoiseRectangle::NoiseRectangle()
+{
+    const auto setDirty = [this]() {
+        m_dirty = true;
+        update();
+    };
+
+    connect(this, &QQuickItem::widthChanged, this, setDirty);
+    connect(this, &QQuickItem::heightChanged, this, setDirty);
+    connect(this, &NoiseRectangle::strengthChanged, this, setDirty);
+}
+
+QSGNode *NoiseRectangle::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
+{
+    if (!oldNode)
+    {
+        oldNode = new QSGRectangularNoiseNode;
+    }
+
+    assert(dynamic_cast<QSGRectangularNoiseNode*>(oldNode));
+
+    const auto node = static_cast<QSGRectangularNoiseNode*>(oldNode);
+
+    if (m_dirty)
+    {
+        // Synchronize the item with the node
+        node->setStrength(m_strength);
+        node->setRect(boundingRect());
+        m_dirty = false;
+    }
+
+    return node;
+}
+
+qreal NoiseRectangle::strength() const
+{
+    return m_strength;
+}
+
+void NoiseRectangle::setStrength(qreal newStrength)
+{
+    if (qFuzzyCompare(m_strength, newStrength))
+        return;
+
+    m_strength = newStrength;
+
+    setFlag(ItemHasContents, !qFuzzyIsNull(m_strength));
+
+    emit strengthChanged();
+}
+
+void NoiseRectangle::componentComplete()
+{
+    if (!qFuzzyIsNull(m_strength))
+    {
+        setFlag(ItemHasContents);
+        update();
+    }
+    QQuickItem::componentComplete();
+}


=====================================
modules/gui/qt/widgets/native/noiserectangle.hpp
=====================================
@@ -0,0 +1,47 @@
+/*****************************************************************************
+ * Copyright (C) 2024 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#ifndef NOISERECTANGLE_HPP
+#define NOISERECTANGLE_HPP
+
+#include <QQuickItem>
+
+class NoiseRectangle : public QQuickItem
+{
+    Q_OBJECT
+
+    Q_PROPERTY(qreal strength READ strength WRITE setStrength NOTIFY strengthChanged FINAL)
+
+    QML_ELEMENT
+public:
+    NoiseRectangle();
+
+    QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
+
+    qreal strength() const;
+    void setStrength(qreal newStrength);
+
+signals:
+    void strengthChanged();
+private:
+    bool m_dirty = false;
+    qreal m_strength = 0.2;
+protected:
+    void componentComplete() override;
+};
+
+#endif // NOISERECTANGLE_HPP


=====================================
modules/gui/qt/widgets/qml/FrostedGlassEffect.qml
=====================================
@@ -49,7 +49,7 @@ Widgets.BlurEffect {
         color: Qt.alpha(root.tint, root.tintStrength)
     }
 
-    ShaderEffect {
+    Widgets.NoiseRectangle {
         id: noise
 
         // Overlay for the blur effect:
@@ -58,8 +58,6 @@ Widgets.BlurEffect {
 
         visible: root.noiseStrength > 0.0
 
-        readonly property real strength: root.noiseStrength
-
-        fragmentShader: "qrc:///shaders/Noise.frag.qsb"
+        strength: root.noiseStrength
     }
 }



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/caa02fe5e422625649e7706475a03d8cef5e4b38...85d71854b3bd06438caf3808a9696e115bd46588

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/caa02fe5e422625649e7706475a03d8cef5e4b38...85d71854b3bd06438caf3808a9696e115bd46588
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list