summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2021-07-29 12:45:16 +0200
committerPaul Lemire <paul.lemire@kdab.com>2021-08-03 05:25:36 +0000
commit35d956f317f6d2a63dcae294be52ee46934a6bf8 (patch)
treeae6a3eb05c8e321329341a12554cca61b5344972 /src
parent9a71b752d0bd8a0f21982094ef2f6986ea9ded12 (diff)
Fix for QShaderNode fix that selected highest version number of a rule
The rule selection still has to be made from last added rule to first so that format.support works correctly. - Update QShaderNode unit tests Change-Id: I47af898ee0d82e91009efccf1dca9937feaca717 Reviewed-by: Mike Krus <mike.krus@kdab.com> (cherry picked from commit 21168905a7eda8806543b490a0fae5a5a0ec7cad) Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/render/shadergraph/qshadernode.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/render/shadergraph/qshadernode.cpp b/src/render/shadergraph/qshadernode.cpp
index bb1f12fed..0403f1673 100644
--- a/src/render/shadergraph/qshadernode.cpp
+++ b/src/render/shadergraph/qshadernode.cpp
@@ -152,11 +152,15 @@ QVector<QShaderFormat> QShaderNode::availableFormats() const
QShaderNode::Rule QShaderNode::rule(const QShaderFormat &format) const
{
- const auto it = std::find_if(m_rules.crbegin(), m_rules.crend(),
- [format](const QPair<QShaderFormat, Rule> &entry) {
- return format.supports(entry.first);
- });
- return it != m_rules.crend() ? it->second : Rule();
+ const QPair<QShaderFormat, Rule> *selected = nullptr;
+ for (auto it = m_rules.crbegin(); it != m_rules.crend(); ++it) {
+ const auto &entry = *it;
+ if (format.supports(entry.first)) {
+ if (!selected || entry.first.version() > selected->first.version())
+ selected = &entry;
+ }
+ }
+ return selected ? selected->second : Rule();
}
QShaderNode::Rule::Rule(const QByteArray &subs, const QByteArrayList &snippets) noexcept