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 <mahmoud.badri@qt.io>
Reviewed-by: Ali Kianian <ali.kianian@qt.io>
This commit is contained in:
Miikka Heikkinen
2024-11-29 13:55:12 +02:00
parent 4560089e84
commit 74dd9598aa
2 changed files with 11 additions and 12 deletions

View File

@@ -240,7 +240,7 @@ void CompositionNode::setFragmentCode(const QString &fragmentCode)
return; return;
m_fragmentCode = fragmentCode; m_fragmentCode = fragmentCode;
m_fragInUseCheckNeeded = true; m_InUseCheckNeeded = true;
emit fragmentCodeChanged(); emit fragmentCodeChanged();
requestRebakeIfLiveUpdateMode(); requestRebakeIfLiveUpdateMode();
@@ -252,7 +252,7 @@ void CompositionNode::setVertexCode(const QString &vertexCode)
return; return;
m_vertexCode = vertexCode; m_vertexCode = vertexCode;
m_vertInUseCheckNeeded = true; m_InUseCheckNeeded = true;
emit vertexCodeChanged(); emit vertexCodeChanged();
requestRebakeIfLiveUpdateMode(); requestRebakeIfLiveUpdateMode();
@@ -271,6 +271,7 @@ void CompositionNode::addUniform(const QVariantMap &data)
const auto uniform = new Uniform({}, QJsonObject::fromVariantMap(data), {}); const auto uniform = new Uniform({}, QJsonObject::fromVariantMap(data), {});
g_propertyData.insert(uniform->name(), uniform->value()); g_propertyData.insert(uniform->name(), uniform->value());
m_uniformsModel.addUniform(uniform); m_uniformsModel.addUniform(uniform);
updateAreUniformsInUse(true);
} }
void CompositionNode::updateUniform(int index, const QVariantMap &data) 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()); g_propertyData.insert(uniform->name(), uniform->value());
m_uniformsModel.updateUniform(index, uniform); 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 QString matchTemplate("\\b%1\\b");
const QList<Uniform *> uniList = uniforms(); const QList<Uniform *> uniList = uniforms();
for (int i = 0; i < uniList.size(); ++i) { for (int i = 0; i < uniList.size(); ++i) {
@@ -293,15 +295,13 @@ void CompositionNode::updateAreUniformsInUse()
QString pattern = matchTemplate.arg(QRegularExpression::escape(u->name())); QString pattern = matchTemplate.arg(QRegularExpression::escape(u->name()));
QRegularExpression regex(pattern); QRegularExpression regex(pattern);
bool found = false; bool found = false;
if (m_fragInUseCheckNeeded)
found = regex.match(m_fragmentCode).hasMatch(); found = regex.match(m_fragmentCode).hasMatch();
if (m_vertInUseCheckNeeded && !found) if (!found)
found = regex.match(m_vertexCode).hasMatch(); found = regex.match(m_vertexCode).hasMatch();
m_uniformsModel.setData(m_uniformsModel.index(i), found, m_uniformsModel.setData(m_uniformsModel.index(i), found,
EffectComposerUniformsModel::IsInUse); EffectComposerUniformsModel::IsInUse);
} }
m_vertInUseCheckNeeded = false; m_InUseCheckNeeded = false;
m_fragInUseCheckNeeded = false;
} }
} }

View File

@@ -77,7 +77,7 @@ public:
void openCodeEditor(); void openCodeEditor();
void addUniform(const QVariantMap &data); void addUniform(const QVariantMap &data);
void updateUniform(int index, const QVariantMap &data); void updateUniform(int index, const QVariantMap &data);
void updateAreUniformsInUse(); void updateAreUniformsInUse(bool force = false);
signals: signals:
void uniformsModelChanged(); void uniformsModelChanged();
@@ -104,8 +104,7 @@ private:
bool m_isCustom = false; bool m_isCustom = false;
int m_refCount = 0; int m_refCount = 0;
int m_extraMargin = 0; int m_extraMargin = 0;
bool m_vertInUseCheckNeeded = false; bool m_InUseCheckNeeded = false;
bool m_fragInUseCheckNeeded = false;
EffectComposerUniformsModel m_uniformsModel; EffectComposerUniformsModel m_uniformsModel;
std::unique_ptr<ShaderEditorData> m_shaderEditorData; std::unique_ptr<ShaderEditorData> m_shaderEditorData;