Blob Blame History Raw
From 23f45b67805dc00878eae5ff4d1eae71a96d2bc0 Mon Sep 17 00:00:00 2001
From: Robin Lee <cheeselee@fedoraproject.org>
Date: Thu, 12 Nov 2020 19:13:48 +0800
Subject: [PATCH 4/6] unload blur

---
 plugins/kwineffects/blur/blur.cpp | 24 ++++++++++++++----------
 plugins/kwineffects/blur/blur.h   |  1 +
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/plugins/kwineffects/blur/blur.cpp b/plugins/kwineffects/blur/blur.cpp
index 45b994c14..470bef12f 100644
--- a/plugins/kwineffects/blur/blur.cpp
+++ b/plugins/kwineffects/blur/blur.cpp
@@ -41,16 +41,7 @@ static const QByteArray s_blurAtomName = QByteArrayLiteral("_KDE_NET_WM_BLUR_BEH
 
 BlurEffect::BlurEffect(QObject *, const QVariantList &)
 {
-    // 禁用kwin自己的模糊特效,防止两个特效之间出现冲突
-    {
-        bool blur_loaded = false;
-        QMetaObject::invokeMethod(effects, "isEffectLoaded", Qt::DirectConnection, Q_RETURN_ARG(bool, blur_loaded), Q_ARG(QString, "blur"));
-
-        if (blur_loaded) {
-            // qWarning() << "will try unload builtIn blur effect of kwin";
-            QMetaObject::invokeMethod(effects, "unloadEffect", Qt::DirectConnection, Q_ARG(QString, "blur"));
-        }
-    }
+    unloadBuiltinBlur();
 
     m_shader = new BlurShader(this);
 
@@ -690,8 +681,21 @@ void BlurEffect::generateNoiseTexture()
     m_noiseTexture.setWrapMode(GL_REPEAT);
 }
 
+void BlurEffect::unloadBuiltinBlur()
+// 禁用kwin自己的模糊特效,防止两个特效之间出现冲突
+{
+    bool blur_loaded = false;
+    QMetaObject::invokeMethod(effects, "isEffectLoaded", Qt::DirectConnection, Q_RETURN_ARG(bool, blur_loaded), Q_ARG(QString, "blur"));
+
+    if (blur_loaded) {
+        qWarning() << "will try unload builtIn blur effect of kwin";
+        QMetaObject::invokeMethod(effects, "unloadEffect", Qt::DirectConnection, Q_ARG(QString, "blur"));
+    }
+}
+
 void BlurEffect::doBlur(const QRegion& shape, const QRect& screen, const float opacity, const QMatrix4x4 &screenProjection, bool isDock, QRect windowRect)
 {
+    unloadBuiltinBlur();
     // Blur would not render correctly on a secondary monitor because of wrong coordinates
     // BUG: 393723
     const int xTranslate = -screen.x();
diff --git a/plugins/kwineffects/blur/blur.h b/plugins/kwineffects/blur/blur.h
index 58889bc8a..441441c85 100644
--- a/plugins/kwineffects/blur/blur.h
+++ b/plugins/kwineffects/blur/blur.h
@@ -88,6 +88,7 @@ private:
     void uploadRegion(QVector2D *&map, const QRegion &region, const int downSampleIterations);
     void uploadGeometry(GLVertexBuffer *vbo, const QRegion &blurRegion, const QRegion &windowRegion);
     void generateNoiseTexture();
+    void unloadBuiltinBlur();
 
     void upscaleRenderToScreen(GLVertexBuffer *vbo, int vboStart, int blurRectCount, QMatrix4x4 screenProjection, QPoint windowPosition);
     void downSampleTexture(GLVertexBuffer *vbo, int blurRectCount);
-- 
2.26.2