File 0002-Revert-Fix-ShadowedTexture-crashing-with-software-re.patch of Package kf6-kirigami

From 5d2336b70038427e2d1d8348187a38a10fbe94c0 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Mon, 14 Jul 2025 13:56:59 +0300
Subject: [PATCH 2/3] Revert "Fix ShadowedTexture crashing with software
 rendering"

This reverts commit 4dc4e78d26701d5babfec6602ac705912d7e8154.

(cherry picked from commit 8d96bcc36a40465007857490376559288b2ebcd9)
---
 .../scenegraph/softwarerectanglenode.cpp      | 56 +++++++++++--------
 1 file changed, 33 insertions(+), 23 deletions(-)

diff --git a/src/primitives/scenegraph/softwarerectanglenode.cpp b/src/primitives/scenegraph/softwarerectanglenode.cpp
index 8c7d900f..13371029 100644
--- a/src/primitives/scenegraph/softwarerectanglenode.cpp
+++ b/src/primitives/scenegraph/softwarerectanglenode.cpp
@@ -53,6 +53,18 @@ void SoftwareRectangleNode::setImage(const QImage &image)
         return;
     }
 
+    if (m_imageNode) {
+        removeChildNode(m_imageNode);
+        delete m_imageNode;
+    }
+
+    m_imageNode = m_window->createImageNode();
+    if (!m_imageNode) {
+        return;
+    }
+
+    m_imageNode->setFiltering(QSGTexture::Filtering::Linear);
+
     m_textureInfo = ShaderNode::TextureInfo{
         .channel = 0,
         .options = {},
@@ -60,6 +72,9 @@ void SoftwareRectangleNode::setImage(const QImage &image)
         .provider = nullptr,
         .providerConnection = {},
     };
+
+    m_imageNode->setTexture(m_textureInfo.texture.get());
+    appendChildNode(m_imageNode);
 }
 
 void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider)
@@ -68,6 +83,18 @@ void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider)
         return;
     }
 
+    if (m_imageNode) {
+        removeChildNode(m_imageNode);
+        delete m_imageNode;
+    }
+
+    m_imageNode = m_window->createImageNode();
+    if (!m_imageNode) {
+        return;
+    }
+
+    m_imageNode->setFiltering(QSGTexture::Filtering::Linear);
+
     m_textureInfo = ShaderNode::TextureInfo{
         .channel = 0,
         .options = {},
@@ -75,6 +102,9 @@ void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider)
         .provider = provider,
         .providerConnection = {},
     };
+
+    m_imageNode->setTexture(m_textureInfo.provider->texture());
+    appendChildNode(m_imageNode);
 }
 
 void SoftwareRectangleNode::setRadius(qreal radius)
@@ -114,32 +144,12 @@ QSGRenderNode::RenderingFlags SoftwareRectangleNode::flags() const
 
 void SoftwareRectangleNode::preprocess()
 {
-    QSGTexture *texture = nullptr;
-    if (QSGTextureProvider *provider = m_textureInfo.provider) {
-        texture = provider->texture();
+    auto provider = m_textureInfo.provider;
+    if (provider && m_imageNode) {
+        m_imageNode->setTexture(provider->texture());
         if (QSGDynamicTexture *dynamic_texture = qobject_cast<QSGDynamicTexture *>(provider->texture())) {
             dynamic_texture->updateTexture();
         }
-    } else if (m_textureInfo.texture) {
-        texture = m_textureInfo.texture.get();
-    }
-
-    if (texture) {
-        if (!m_imageNode) {
-            m_imageNode = m_window->createImageNode();
-        }
-
-        // The rect will be set in render().
-        m_imageNode->setFiltering(QSGTexture::Filtering::Linear);
-        m_imageNode->setTexture(texture);
-
-        if (!m_imageNode->parent()) {
-            appendChildNode(m_imageNode);
-        }
-    } else if (m_imageNode) {
-        removeChildNode(m_imageNode);
-        delete m_imageNode;
-        m_imageNode = nullptr;
     }
 }
 
-- 
2.50.0

openSUSE Build Service is sponsored by