From e5276cd4cdc6b7b2e37c14e6983eaf4ce31b5a1c Mon Sep 17 00:00:00 2001 From: Mauro Persano Date: Mon, 3 May 2021 10:20:47 -0300 Subject: QShaderNode: use rule with highest version number Pick the supported rule with highest version number. For instance, if we're looking for a rule for OpenGL ES 3.2, and there's a rule for ES 2.0 and another one for ES 3.0, make sure the rule for ES 3 is selected. Pick-to: 6.1 5.15 Change-Id: Ie517206948bc0422f6254472de43cda4dd2ce982 Reviewed-by: Paul Lemire --- src/render/shadergraph/qshadernode.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/render/shadergraph/qshadernode.cpp b/src/render/shadergraph/qshadernode.cpp index aa4a101c2..b95a77b04 100644 --- a/src/render/shadergraph/qshadernode.cpp +++ b/src/render/shadergraph/qshadernode.cpp @@ -152,11 +152,14 @@ QList 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 &entry) { - return format.supports(entry.first); - }); - return it != m_rules.crend() ? it->second : Rule(); + const QPair *selected = nullptr; + for (const auto &entry : qAsConst(m_rules)) { + 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 -- cgit v1.2.3