From 74dd9598aa95868397b4d5ec036acf7cb42dab68 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 29 Nov 2024 13:55:12 +0200 Subject: [PATCH] EffectComposer: Relax code change requirements for "in use" update In use update is now forced after property edit or add is finished. Also, a change to either fragment or vertex shader triggers checking in use state in both shaders to get the complete picture. Fixes: QDS-14240 Fixes: QDS-14239 Change-Id: Id2853440080a935a99b7945bcda20c7ade499aab Reviewed-by: Mahmoud Badri Reviewed-by: Ali Kianian --- src/plugins/effectcomposer/compositionnode.cpp | 18 +++++++++--------- src/plugins/effectcomposer/compositionnode.h | 5 ++--- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/plugins/effectcomposer/compositionnode.cpp b/src/plugins/effectcomposer/compositionnode.cpp index 0b51d9fd10d..f460d64b041 100644 --- a/src/plugins/effectcomposer/compositionnode.cpp +++ b/src/plugins/effectcomposer/compositionnode.cpp @@ -240,7 +240,7 @@ void CompositionNode::setFragmentCode(const QString &fragmentCode) return; m_fragmentCode = fragmentCode; - m_fragInUseCheckNeeded = true; + m_InUseCheckNeeded = true; emit fragmentCodeChanged(); requestRebakeIfLiveUpdateMode(); @@ -252,7 +252,7 @@ void CompositionNode::setVertexCode(const QString &vertexCode) return; m_vertexCode = vertexCode; - m_vertInUseCheckNeeded = true; + m_InUseCheckNeeded = true; emit vertexCodeChanged(); requestRebakeIfLiveUpdateMode(); @@ -271,6 +271,7 @@ void CompositionNode::addUniform(const QVariantMap &data) const auto uniform = new Uniform({}, QJsonObject::fromVariantMap(data), {}); g_propertyData.insert(uniform->name(), uniform->value()); m_uniformsModel.addUniform(uniform); + updateAreUniformsInUse(true); } void CompositionNode::updateUniform(int index, const QVariantMap &data) @@ -281,11 +282,12 @@ void CompositionNode::updateUniform(int index, const QVariantMap &data) g_propertyData.insert(uniform->name(), uniform->value()); m_uniformsModel.updateUniform(index, uniform); + updateAreUniformsInUse(true); } -void CompositionNode::updateAreUniformsInUse() +void CompositionNode::updateAreUniformsInUse(bool force) { - if (m_fragInUseCheckNeeded || m_vertInUseCheckNeeded) { + if (force || m_InUseCheckNeeded) { const QString matchTemplate("\\b%1\\b"); const QList uniList = uniforms(); for (int i = 0; i < uniList.size(); ++i) { @@ -293,15 +295,13 @@ void CompositionNode::updateAreUniformsInUse() QString pattern = matchTemplate.arg(QRegularExpression::escape(u->name())); QRegularExpression regex(pattern); bool found = false; - if (m_fragInUseCheckNeeded) - found = regex.match(m_fragmentCode).hasMatch(); - if (m_vertInUseCheckNeeded && !found) + found = regex.match(m_fragmentCode).hasMatch(); + if (!found) found = regex.match(m_vertexCode).hasMatch(); m_uniformsModel.setData(m_uniformsModel.index(i), found, EffectComposerUniformsModel::IsInUse); } - m_vertInUseCheckNeeded = false; - m_fragInUseCheckNeeded = false; + m_InUseCheckNeeded = false; } } diff --git a/src/plugins/effectcomposer/compositionnode.h b/src/plugins/effectcomposer/compositionnode.h index 096e959f224..1c7999519ca 100644 --- a/src/plugins/effectcomposer/compositionnode.h +++ b/src/plugins/effectcomposer/compositionnode.h @@ -77,7 +77,7 @@ public: void openCodeEditor(); void addUniform(const QVariantMap &data); void updateUniform(int index, const QVariantMap &data); - void updateAreUniformsInUse(); + void updateAreUniformsInUse(bool force = false); signals: void uniformsModelChanged(); @@ -104,8 +104,7 @@ private: bool m_isCustom = false; int m_refCount = 0; int m_extraMargin = 0; - bool m_vertInUseCheckNeeded = false; - bool m_fragInUseCheckNeeded = false; + bool m_InUseCheckNeeded = false; EffectComposerUniformsModel m_uniformsModel; std::unique_ptr m_shaderEditorData;