summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-07-05 16:15:01 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-07-08 09:05:16 +0000
commit5667c870fb526b2bf0a5d4097e0f166b546550f0 (patch)
tree5f74c24b3355f844c2feccdf5ebece86a6966270 /tests
parentf7fefed2ea370073ff0828baf2c42cab894e1bd0 (diff)
Add support for node parameters in QShaderNodesLoader
This will allow to make the prototypes more extensible when referred to from a graph file while providing some sane defaults. Change-Id: I1ae10182427d8a7d29c51a64e19e99139494ea92 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/gui/util/qshadernodesloader/tst_qshadernodesloader.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/tests/auto/gui/util/qshadernodesloader/tst_qshadernodesloader.cpp b/tests/auto/gui/util/qshadernodesloader/tst_qshadernodesloader.cpp
index 59c476acc3..ad76012e2f 100644
--- a/tests/auto/gui/util/qshadernodesloader/tst_qshadernodesloader.cpp
+++ b/tests/auto/gui/util/qshadernodesloader/tst_qshadernodesloader.cpp
@@ -126,10 +126,13 @@ void tst_QShaderNodesLoader::shouldLoadFromJsonStream_data()
QTest::newRow("empty") << createBuffer("", QIODevice::ReadOnly) << NodeHash() << QShaderNodesLoader::Error;
const auto smallJson = "{"
- " \"worldPosition\": {"
+ " \"inputValue\": {"
" \"outputs\": ["
- " \"worldPosition\""
+ " \"value\""
" ],"
+ " \"parameters\": {"
+ " \"name\": \"defaultName\""
+ " },"
" \"rules\": ["
" {"
" \"format\": {"
@@ -137,8 +140,8 @@ void tst_QShaderNodesLoader::shouldLoadFromJsonStream_data()
" \"major\": 2,"
" \"minor\": 0"
" },"
- " \"substitution\": \"highp vec3 $worldPosition = worldPosition;\","
- " \"headerSnippets\": [ \"varying highp vec3 worldPosition;\" ]"
+ " \"substitution\": \"highp vec3 $value = $name;\","
+ " \"headerSnippets\": [ \"varying highp vec3 $name;\" ]"
" },"
" {"
" \"format\": {"
@@ -146,8 +149,8 @@ void tst_QShaderNodesLoader::shouldLoadFromJsonStream_data()
" \"major\": 2,"
" \"minor\": 1"
" },"
- " \"substitution\": \"vec3 $worldPosition = worldPosition;\","
- " \"headerSnippets\": [ \"in vec3 worldPosition;\" ]"
+ " \"substitution\": \"vec3 $value = $name;\","
+ " \"headerSnippets\": [ \"in vec3 $name;\" ]"
" }"
" ]"
" },"
@@ -218,14 +221,15 @@ void tst_QShaderNodesLoader::shouldLoadFromJsonStream_data()
auto protos = NodeHash();
- auto worldPosition = createNode({
- createPort(QShaderNodePort::Output, "worldPosition")
+ auto inputValue = createNode({
+ createPort(QShaderNodePort::Output, "value")
});
- worldPosition.addRule(openGLES2, QShaderNode::Rule("highp vec3 $worldPosition = worldPosition;",
- QByteArrayList() << "varying highp vec3 worldPosition;"));
- worldPosition.addRule(openGL2, QShaderNode::Rule("vec3 $worldPosition = worldPosition;",
- QByteArrayList() << "in vec3 worldPosition;"));
- protos.insert("worldPosition", worldPosition);
+ inputValue.setParameter("name", "defaultName");
+ inputValue.addRule(openGLES2, QShaderNode::Rule("highp vec3 $value = $name;",
+ QByteArrayList() << "varying highp vec3 $name;"));
+ inputValue.addRule(openGL2, QShaderNode::Rule("vec3 $value = $name;",
+ QByteArrayList() << "in vec3 $name;"));
+ protos.insert("inputValue", inputValue);
auto fragColor = createNode({
createPort(QShaderNodePort::Input, "fragColor")
@@ -275,6 +279,11 @@ void tst_QShaderNodesLoader::shouldLoadFromJsonStream()
res.sort();
return res;
};
+ const auto sortedParameters = [](const QShaderNode &node) {
+ auto res = node.parameterNames();
+ res.sort();
+ return res;
+ };
QCOMPARE(sortedKeys(loader.nodes()), sortedKeys(nodes));
for (const auto &key : nodes.keys()) {
const auto actual = loader.nodes().value(key);
@@ -282,6 +291,10 @@ void tst_QShaderNodesLoader::shouldLoadFromJsonStream()
QVERIFY(actual.uuid().isNull());
QCOMPARE(actual.ports(), expected.ports());
+ QCOMPARE(sortedParameters(actual), sortedParameters(expected));
+ for (const auto &name : expected.parameterNames()) {
+ QCOMPARE(actual.parameter(name), expected.parameter(name));
+ }
QCOMPARE(actual.availableFormats(), expected.availableFormats());
for (const auto &format : expected.availableFormats()) {
QCOMPARE(actual.rule(format), expected.rule(format));