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 ++++++++++++---- src/gui/util/qshadergenerator_p.h | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) (limited to 'src') 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()) { diff --git a/src/gui/util/qshadergenerator_p.h b/src/gui/util/qshadergenerator_p.h index 392c3532df..7bc8838b52 100644 --- a/src/gui/util/qshadergenerator_p.h +++ b/src/gui/util/qshadergenerator_p.h @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE class QShaderGenerator { public: - Q_GUI_EXPORT QByteArray createShaderCode() const; + Q_GUI_EXPORT QByteArray createShaderCode(const QStringList &enabledLayers = QStringList()) const; QShaderGraph graph; QShaderFormat format; -- cgit v1.2.3