diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2017-07-19 16:54:24 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-09-04 11:11:50 +0000 |
commit | aa3d86f2b7358dd71bdf78fb275bc2aa21ca23fd (patch) | |
tree | 50530329d97967d20aeb460ec71e7d8cfe33227f /tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp | |
parent | 47ed71044ef0d9ac2b86a3943a0c4c67c485737b (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.cpp | 90 |
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"); |