From 4bfff6a98b59b32605d881a463ad3edc221a7dc8 Mon Sep 17 00:00:00 2001 From: Kevin Ottens Date: Wed, 19 Jul 2017 15:12:38 +0200 Subject: Implement graph layers support in QShaderGenerator Change-Id: I823f7866bc5e1f3b262f1aacf4c341dabda7305d Reviewed-by: Sean Harmer --- src/gui/util/qshadergenerator.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/gui/util/qshadergenerator.cpp') diff --git a/src/gui/util/qshadergenerator.cpp b/src/gui/util/qshadergenerator.cpp index 2c8b0ee516..7d16448647 100644 --- a/src/gui/util/qshadergenerator.cpp +++ b/src/gui/util/qshadergenerator.cpp @@ -279,7 +279,7 @@ namespace } } -QByteArray QShaderGenerator::createShaderCode() const +QByteArray QShaderGenerator::createShaderCode(const QStringList &enabledLayers) const { auto code = QByteArrayList(); @@ -303,9 +303,17 @@ QByteArray QShaderGenerator::createShaderCode() const code << QByteArray(); } + const auto intersectsEnabledLayers = [enabledLayers] (const QStringList &layers) { + return layers.isEmpty() + || std::any_of(layers.cbegin(), layers.cend(), + [enabledLayers] (const QString &s) { return enabledLayers.contains(s); }); + }; + for (const auto &node : graph.nodes()) { - for (const auto &snippet : node.rule(format).headerSnippets) { - code << replaceParameters(snippet, node, format); + if (intersectsEnabledLayers(node.layers())) { + for (const auto &snippet : node.rule(format).headerSnippets) { + code << replaceParameters(snippet, node, format); + } } } @@ -313,7 +321,7 @@ QByteArray QShaderGenerator::createShaderCode() const code << QByteArrayLiteral("void main()"); code << QByteArrayLiteral("{"); - for (const auto &statement : graph.createStatements()) { + for (const auto &statement : graph.createStatements(enabledLayers)) { const auto node = statement.node; auto line = node.rule(format).substitution; for (const auto &port : node.ports()) { -- cgit v1.2.3