summaryrefslogtreecommitdiffstats
path: root/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-07-19 16:54:24 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-09-04 11:11:50 +0000
commitaa3d86f2b7358dd71bdf78fb275bc2aa21ca23fd (patch)
tree50530329d97967d20aeb460ec71e7d8cfe33227f /tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp
parent47ed71044ef0d9ac2b86a3943a0c4c67c485737b (diff)
Implement enabledLayers on ShaderBuilder
This is the backend counterpart to the QShaderProgramBuilder introduction of the enabledLayers property. Change-Id: Iecec5e9d1450c454f64c243f5f797c0d63e5f1ee Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp')
-rw-r--r--tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp b/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp
index c381f328e..6557acb6c 100644
--- a/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp
+++ b/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp
@@ -73,6 +73,7 @@ private slots:
// THEN
QVERIFY(!shaderBuilder.isEnabled());
+ QVERIFY(shaderBuilder.enabledLayers().isEmpty());
for (int i = 0; i <= Qt3DRender::Render::ShaderBuilder::Compute; i++) {
const auto type = static_cast<Qt3DRender::Render::ShaderBuilder::ShaderType>(i);
QCOMPARE(shaderBuilder.shaderGraph(type), QUrl());
@@ -97,6 +98,11 @@ private slots:
}
{
auto frontend = new Qt3DRender::QShaderProgramBuilder;
+ frontend->setEnabledLayers({"foo", "bar"});
+ QTest::newRow("enabledLayers") << frontend;
+ }
+ {
+ auto frontend = new Qt3DRender::QShaderProgramBuilder;
frontend->setVertexShaderGraph(QUrl::fromEncoded("qrc:/vertex.json"));
QTest::newRow("vertex") << frontend;
}
@@ -144,6 +150,8 @@ private slots:
else
QVERIFY(backend.shaderProgramId().isNull());
+ QCOMPARE(backend.enabledLayers(), frontend->enabledLayers());
+
QCOMPARE(backend.shaderGraph(Qt3DRender::Render::ShaderBuilder::Vertex), frontend->vertexShaderGraph());
QCOMPARE(backend.shaderCode(Qt3DRender::Render::ShaderBuilder::Vertex), QByteArray());
QCOMPARE(backend.isShaderCodeDirty(Qt3DRender::Render::ShaderBuilder::Vertex), !frontend->vertexShaderGraph().isEmpty());
@@ -173,6 +181,7 @@ private slots:
// THEN
QVERIFY(!backend.isEnabled());
+ QVERIFY(backend.enabledLayers().isEmpty());
for (int i = 0; i <= Qt3DRender::Render::ShaderBuilder::Compute; i++) {
const auto type = static_cast<Qt3DRender::Render::ShaderBuilder::ShaderType>(i);
QCOMPARE(backend.shaderGraph(type), QUrl());
@@ -270,6 +279,87 @@ private slots:
renderer.resetDirty();
}
+ void shouldHandleEnabledLayersPropertyChange()
+ {
+ // GIVEN
+ Qt3DRender::Render::ShaderBuilder backend;
+ TestRenderer renderer;
+ backend.setRenderer(&renderer);
+ const auto layers = QStringList() << "foo" << "bar";
+
+ for (int i = 0; i <= Qt3DRender::Render::ShaderBuilder::Compute; i++) {
+ const auto type = static_cast<Qt3DRender::Render::ShaderBuilder::ShaderType>(i);
+ const auto graphUrl = QUrl::fromEncoded("qrc:/input.json");
+ backend.setShaderGraph(type, graphUrl);
+ }
+
+ // WHEN
+ auto updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
+ updateChange->setValue(layers);
+ updateChange->setPropertyName("enabledLayers");
+ backend.sceneChangeEvent(updateChange);
+
+ // THEN
+ QCOMPARE(backend.enabledLayers(), layers);
+ for (int i = 0; i <= Qt3DRender::Render::ShaderBuilder::Compute; i++) {
+ const auto type = static_cast<Qt3DRender::Render::ShaderBuilder::ShaderType>(i);
+ QVERIFY(backend.isShaderCodeDirty(type));
+ backend.generateCode(type); // Resets the dirty flag
+ }
+ QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
+ renderer.resetDirty();
+
+ // WHEN
+ updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
+ updateChange->setValue(layers);
+ updateChange->setPropertyName("enabledLayers");
+ backend.sceneChangeEvent(updateChange);
+
+ // THEN
+ QCOMPARE(backend.enabledLayers(), layers);
+ for (int i = 0; i <= Qt3DRender::Render::ShaderBuilder::Compute; i++) {
+ const auto type = static_cast<Qt3DRender::Render::ShaderBuilder::ShaderType>(i);
+ QVERIFY(!backend.isShaderCodeDirty(type));
+ backend.generateCode(type); // Resets the dirty flag
+ }
+ QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
+ renderer.resetDirty();
+
+ // WHEN
+ updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
+ updateChange->setValue(QStringList());
+ updateChange->setPropertyName("enabledLayers");
+ backend.sceneChangeEvent(updateChange);
+
+ // THEN
+ QVERIFY(backend.shaderProgramId().isNull());
+ for (int i = 0; i <= Qt3DRender::Render::ShaderBuilder::Compute; i++) {
+ const auto type = static_cast<Qt3DRender::Render::ShaderBuilder::ShaderType>(i);
+ QVERIFY(backend.isShaderCodeDirty(type));
+ backend.generateCode(type); // Resets the dirty flag
+ }
+ QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
+ renderer.resetDirty();
+
+ // WHEN
+ updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
+ updateChange->setValue(layers);
+ updateChange->setPropertyName("enabledLayers");
+ backend.sceneChangeEvent(updateChange);
+ // AND
+ backend.cleanup();
+
+ // THEN
+ QVERIFY(backend.enabledLayers().isEmpty());
+ for (int i = 0; i <= Qt3DRender::Render::ShaderBuilder::Compute; i++) {
+ const auto type = static_cast<Qt3DRender::Render::ShaderBuilder::ShaderType>(i);
+ QVERIFY(!backend.isShaderCodeDirty(type));
+ backend.generateCode(type); // Resets the dirty flag
+ }
+ QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
+ renderer.resetDirty();
+ }
+
void shouldHandleShaderGraphPropertiesChanges_data()
{
QTest::addColumn<QByteArray>("property");