summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-07-05 16:16:10 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-07-08 09:05:19 +0000
commit13ecd686b93a8c8d915301e95eb4f1a2626651de (patch)
tree8687acd48169aa222f68ca25792bcf995bec1be3 /tests
parent5667c870fb526b2bf0a5d4097e0f166b546550f0 (diff)
Add support for node parameters in QShaderGraphLoader
Now the parameters from the prototypes are used as default values and the graph file can overload them. Change-Id: I9a8a73963c7e578bd0a34e96f76f147a12224f4f Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/gui/util/qshadergraphloader/tst_qshadergraphloader.cpp71
1 files changed, 39 insertions, 32 deletions
diff --git a/tests/auto/gui/util/qshadergraphloader/tst_qshadergraphloader.cpp b/tests/auto/gui/util/qshadergraphloader/tst_qshadergraphloader.cpp
index 47088ca2c8..38828e3a9b 100644
--- a/tests/auto/gui/util/qshadergraphloader/tst_qshadergraphloader.cpp
+++ b/tests/auto/gui/util/qshadergraphloader/tst_qshadergraphloader.cpp
@@ -94,13 +94,14 @@ namespace
auto graph = QShaderGraph();
auto worldPosition = createNode({
- createPort(QShaderNodePort::Output, "worldPosition")
+ createPort(QShaderNodePort::Output, "value")
});
worldPosition.setUuid(QUuid("{00000000-0000-0000-0000-000000000001}"));
- worldPosition.addRule(openGLES2, QShaderNode::Rule("highp vec3 $worldPosition = worldPosition;",
- QByteArrayList() << "varying highp vec3 worldPosition;"));
- worldPosition.addRule(openGL3, QShaderNode::Rule("vec3 $worldPosition = worldPosition;",
- QByteArrayList() << "in vec3 worldPosition;"));
+ worldPosition.setParameter("name", "worldPosition");
+ worldPosition.addRule(openGLES2, QShaderNode::Rule("highp vec3 $value = $name;",
+ QByteArrayList() << "varying highp vec3 $name;"));
+ worldPosition.addRule(openGL3, QShaderNode::Rule("vec3 $value = $name;",
+ QByteArrayList() << "in vec3 $name;"));
auto texture = createNode({
createPort(QShaderNodePort::Output, "texture")
@@ -121,13 +122,14 @@ namespace
QByteArrayList() << "in vec2 texCoord;"));
auto lightIntensity = createNode({
- createPort(QShaderNodePort::Output, "lightIntensity")
+ createPort(QShaderNodePort::Output, "value")
});
lightIntensity.setUuid(QUuid("{00000000-0000-0000-0000-000000000004}"));
- lightIntensity.addRule(openGLES2, QShaderNode::Rule("highp float $lightIntensity = lightIntensity;",
- QByteArrayList() << "uniform highp float lightIntensity;"));
- lightIntensity.addRule(openGL3, QShaderNode::Rule("float $lightIntensity = lightIntensity;",
- QByteArrayList() << "uniform float lightIntensity;"));
+ lightIntensity.setParameter("name", "defaultName");
+ lightIntensity.addRule(openGLES2, QShaderNode::Rule("highp vec3 $value = $name;",
+ QByteArrayList() << "varying highp vec3 $name;"));
+ lightIntensity.addRule(openGL3, QShaderNode::Rule("vec3 $value = $name;",
+ QByteArrayList() << "in vec3 $name;"));
auto exposure = createNode({
createPort(QShaderNodePort::Output, "exposure")
@@ -189,9 +191,9 @@ namespace
graph.addEdge(createEdge(texture.uuid(), "texture", sampleTexture.uuid(), "sampler"));
graph.addEdge(createEdge(texCoord.uuid(), "texCoord", sampleTexture.uuid(), "coord"));
- graph.addEdge(createEdge(worldPosition.uuid(), "worldPosition", lightFunction.uuid(), "position"));
+ graph.addEdge(createEdge(worldPosition.uuid(), "value", lightFunction.uuid(), "position"));
graph.addEdge(createEdge(sampleTexture.uuid(), "color", lightFunction.uuid(), "baseColor"));
- graph.addEdge(createEdge(lightIntensity.uuid(), "lightIntensity", lightFunction.uuid(), "lightIntensity"));
+ graph.addEdge(createEdge(lightIntensity.uuid(), "value", lightFunction.uuid(), "lightIntensity"));
graph.addEdge(createEdge(lightFunction.uuid(), "outputColor", exposureFunction.uuid(), "inputColor"));
graph.addEdge(createEdge(exposure.uuid(), "exposure", exposureFunction.uuid(), "exposure"));
@@ -373,7 +375,10 @@ void tst_QShaderGraphLoader::shouldLoadFromJsonStream_data()
" \"nodes\": ["
" {"
" \"uuid\": \"{00000000-0000-0000-0000-000000000001}\","
- " \"type\": \"worldPosition\""
+ " \"type\": \"inputValue\","
+ " \"parameters\": {"
+ " \"name\": \"worldPosition\""
+ " }"
" },"
" {"
" \"uuid\": \"{00000000-0000-0000-0000-000000000002}\","
@@ -385,7 +390,7 @@ void tst_QShaderGraphLoader::shouldLoadFromJsonStream_data()
" },"
" {"
" \"uuid\": \"{00000000-0000-0000-0000-000000000004}\","
- " \"type\": \"lightIntensity\""
+ " \"type\": \"inputValue\""
" },"
" {"
" \"uuid\": \"{00000000-0000-0000-0000-000000000005}\","
@@ -423,7 +428,7 @@ void tst_QShaderGraphLoader::shouldLoadFromJsonStream_data()
" },"
" {"
" \"sourceUuid\": \"{00000000-0000-0000-0000-000000000001}\","
- " \"sourcePort\": \"worldPosition\","
+ " \"sourcePort\": \"value\","
" \"targetUuid\": \"{00000000-0000-0000-0000-000000000008}\","
" \"targetPort\": \"position\""
" },"
@@ -435,7 +440,7 @@ void tst_QShaderGraphLoader::shouldLoadFromJsonStream_data()
" },"
" {"
" \"sourceUuid\": \"{00000000-0000-0000-0000-000000000004}\","
- " \"sourcePort\": \"lightIntensity\","
+ " \"sourcePort\": \"value\","
" \"targetUuid\": \"{00000000-0000-0000-0000-000000000008}\","
" \"targetPort\": \"lightIntensity\""
" },"
@@ -466,14 +471,15 @@ void tst_QShaderGraphLoader::shouldLoadFromJsonStream_data()
auto protos = PrototypeHash();
- 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(openGL3, 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(openGL3, QShaderNode::Rule("vec3 $value = $name;",
+ QByteArrayList() << "in vec3 $name;"));
+ protos.insert("inputValue", inputValue);
auto texture = createNode({
createPort(QShaderNodePort::Output, "texture")
@@ -493,15 +499,6 @@ void tst_QShaderGraphLoader::shouldLoadFromJsonStream_data()
QByteArrayList() << "in vec2 texCoord;"));
protos.insert("texCoord", texCoord);
- auto lightIntensity = createNode({
- createPort(QShaderNodePort::Output, "lightIntensity")
- });
- lightIntensity.addRule(openGLES2, QShaderNode::Rule("highp float $lightIntensity = lightIntensity;",
- QByteArrayList() << "varying highp float lightIntensity;"));
- lightIntensity.addRule(openGL3, QShaderNode::Rule("vec3 $lightIntensity = lightIntensity;",
- QByteArrayList() << "in float lightIntensity;"));
- protos.insert("lightIntensity", lightIntensity);
-
auto exposure = createNode({
createPort(QShaderNodePort::Output, "exposure")
});
@@ -580,11 +577,21 @@ void tst_QShaderGraphLoader::shouldLoadFromJsonStream()
dumpStatementsIfNeeded(statements, expected);
QCOMPARE(statements, expected);
+ const auto sortedParameters = [](const QShaderNode &node) {
+ auto res = node.parameterNames();
+ res.sort();
+ return res;
+ };
+
for (int i = 0; i < statements.size(); i++) {
const auto actualNode = statements.at(i).node;
const auto expectedNode = expected.at(i).node;
QCOMPARE(actualNode.ports(), expectedNode.ports());
+ QCOMPARE(sortedParameters(actualNode), sortedParameters(expectedNode));
+ for (const auto &name : expectedNode.parameterNames()) {
+ QCOMPARE(actualNode.parameter(name), expectedNode.parameter(name));
+ }
QCOMPARE(actualNode.availableFormats(), expectedNode.availableFormats());
for (const auto &format : expectedNode.availableFormats()) {
QCOMPARE(actualNode.rule(format), expectedNode.rule(format));