summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-07-19 15:12:38 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-08-02 17:34:56 +0000
commit4bfff6a98b59b32605d881a463ad3edc221a7dc8 (patch)
tree4ffdbd2f21fca12e6d7f66d47a70651a1110e83b /src/gui
parent236284357ff389d377cbb42141e71f6093eccba5 (diff)
Implement graph layers support in QShaderGenerator
Change-Id: I823f7866bc5e1f3b262f1aacf4c341dabda7305d Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/util/qshadergenerator.cpp16
-rw-r--r--src/gui/util/qshadergenerator_p.h2
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;