summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/render/shadergraph/qshadernode.cpp14
-rw-r--r--tests/auto/render/shadergraph/qshadernodes/tst_qshadernodes.cpp4
2 files changed, 11 insertions, 7 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
diff --git a/tests/auto/render/shadergraph/qshadernodes/tst_qshadernodes.cpp b/tests/auto/render/shadergraph/qshadernodes/tst_qshadernodes.cpp
index 2cd2ff90d..2c53de349 100644
--- a/tests/auto/render/shadergraph/qshadernodes/tst_qshadernodes.cpp
+++ b/tests/auto/render/shadergraph/qshadernodes/tst_qshadernodes.cpp
@@ -540,8 +540,8 @@ void tst_QShaderNodes::shouldHandleNodeRulesSupportAndOrder()
QCOMPARE(node.availableFormats().at(2), openGL3);
QCOMPARE(node.rule(openGLES2), es2Rule);
QCOMPARE(node.rule(openGL3), gl3bisRule);
- QCOMPARE(node.rule(openGL32), gl3bisRule);
- QCOMPARE(node.rule(openGL4), gl3bisRule);
+ QCOMPARE(node.rule(openGL32), gl32Rule);
+ QCOMPARE(node.rule(openGL4), gl32Rule);
}
QTEST_MAIN(tst_QShaderNodes)