diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2017-07-19 15:12:38 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-08-02 17:34:56 +0000 |
commit | 4bfff6a98b59b32605d881a463ad3edc221a7dc8 (patch) | |
tree | 4ffdbd2f21fca12e6d7f66d47a70651a1110e83b /src | |
parent | 236284357ff389d377cbb42141e71f6093eccba5 (diff) |
Implement graph layers support in QShaderGenerator
Change-Id: I823f7866bc5e1f3b262f1aacf4c341dabda7305d
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/util/qshadergenerator.cpp | 16 | ||||
-rw-r--r-- | src/gui/util/qshadergenerator_p.h | 2 |
2 files changed, 13 insertions, 5 deletions
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; |