summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-08-12 10:32:28 +0200
committerPaul Lemire <paul.lemire@kdab.com>2020-08-13 08:10:26 +0200
commit59ecf791fad243959d59ed8f5cb461c328cd474a (patch)
tree9f3ebd29923e0130a9fee36f67707aced2bad22f /tests
parenta90c52c9ba1a5a7a9ef5bd4d1da4f7e08787c372 (diff)
rhi: Rework the way we handle RenderTargets
Instead of creating a RenderTarget when we create a pipeline, we now create RenderTargets any time a frontend defines one. This allows to align with the other type of resources that we create before pipelines. Add a dirty flag on QRenderTarget so that backend can easily check if a frontend RenderTarget has changed. Also remove the handling of QRenderTargetSelector::outputs which allows to specify a subset of draw buffers for a given FBO. This cannot be handled with RHI and in a more general way, removing that altogether might simplify the API. If you share the attachments, nothing stops you from creating several FBO to handle that case. Fix coding style and update the unit tests. Change-Id: I9f3623e9d7ab9d508db207f2c43cc6c1eedb4f01 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/render/rendertarget/tst_rendertarget.cpp75
1 files changed, 55 insertions, 20 deletions
diff --git a/tests/auto/render/rendertarget/tst_rendertarget.cpp b/tests/auto/render/rendertarget/tst_rendertarget.cpp
index 265663d1b..5393abcf7 100644
--- a/tests/auto/render/rendertarget/tst_rendertarget.cpp
+++ b/tests/auto/render/rendertarget/tst_rendertarget.cpp
@@ -51,23 +51,27 @@ private Q_SLOTS:
QCOMPARE(backendRenderTarget.isEnabled(), false);
QVERIFY(backendRenderTarget.peerId().isNull());
QVERIFY(backendRenderTarget.renderOutputs().empty());
+ QCOMPARE(backendRenderTarget.isDirty(), false);
}
void checkCleanupState()
{
// GIVEN
+ TestRenderer renderer;
Qt3DRender::Render::RenderTarget backendRenderTarget;
+ Qt3DRender::QRenderTarget renderTarget;
+ Qt3DRender::QRenderTargetOutput renderTargetOuput;
+ renderTarget.addOutput(&renderTargetOuput);
// WHEN
- backendRenderTarget.setEnabled(true);
- backendRenderTarget.appendRenderOutput(Qt3DCore::QNodeId::createId());
- backendRenderTarget.appendRenderOutput(Qt3DCore::QNodeId::createId());
-
+ backendRenderTarget.setRenderer(&renderer);
+ simulateInitializationSync(&renderTarget, &backendRenderTarget);
backendRenderTarget.cleanup();
// THEN
QCOMPARE(backendRenderTarget.isEnabled(), false);
QCOMPARE(backendRenderTarget.renderOutputs().size(), 0);
+ QCOMPARE(backendRenderTarget.isDirty(), false);
}
void checkInitializeFromPeer()
@@ -87,6 +91,9 @@ private Q_SLOTS:
QCOMPARE(backendRenderTarget.isEnabled(), true);
QCOMPARE(backendRenderTarget.peerId(), renderTarget.id());
QCOMPARE(backendRenderTarget.renderOutputs(), (QList<Qt3DCore::QNodeId> { renderTargetOuput.id() }));
+ QCOMPARE(backendRenderTarget.isDirty(), true);
+
+ backendRenderTarget.unsetDirty();
}
{
// WHEN
@@ -98,71 +105,94 @@ private Q_SLOTS:
// THEN
QCOMPARE(backendRenderTarget.peerId(), renderTarget.id());
QCOMPARE(backendRenderTarget.isEnabled(), false);
+ QCOMPARE(backendRenderTarget.isDirty(), true);
+
+ backendRenderTarget.unsetDirty();
}
}
void checkAddNoDuplicateOutput()
{
// GIVEN
+ TestRenderer renderer;
Qt3DRender::Render::RenderTarget backendRenderTarget;
+ Qt3DRender::QRenderTarget renderTarget;
+ Qt3DRender::QRenderTargetOutput renderTargetOuput;
// THEN
+ backendRenderTarget.setRenderer(&renderer);
+ simulateInitializationSync(&renderTarget, &backendRenderTarget);
QCOMPARE(backendRenderTarget.renderOutputs().size(), 0);
+ backendRenderTarget.unsetDirty();
// WHEN
- Qt3DCore::QNodeId renderTargetOutputId = Qt3DCore::QNodeId::createId();
- backendRenderTarget.appendRenderOutput(renderTargetOutputId);
+ renderTarget.addOutput(&renderTargetOuput);
+ backendRenderTarget.syncFromFrontEnd(&renderTarget, false);
// THEN
QCOMPARE(backendRenderTarget.renderOutputs().size(), 1);
+ QCOMPARE(backendRenderTarget.isDirty(), true);
+ backendRenderTarget.unsetDirty();
// WHEN
- backendRenderTarget.appendRenderOutput(renderTargetOutputId);
+ renderTarget.addOutput(&renderTargetOuput);
+ backendRenderTarget.syncFromFrontEnd(&renderTarget, false);
// THEN
QCOMPARE(backendRenderTarget.renderOutputs().size(), 1);
+ QCOMPARE(backendRenderTarget.isDirty(), false);
}
void checkAddRemoveOutput()
{
// GIVEN
+ TestRenderer renderer;
Qt3DRender::Render::RenderTarget backendRenderTarget;
+ Qt3DRender::QRenderTarget renderTarget;
+ Qt3DRender::QRenderTargetOutput renderTargetOuput;
// THEN
+ backendRenderTarget.setRenderer(&renderer);
+ simulateInitializationSync(&renderTarget, &backendRenderTarget);
QCOMPARE(backendRenderTarget.renderOutputs().size(), 0);
+ backendRenderTarget.unsetDirty();
// WHEN
- Qt3DCore::QNodeId renderTargetOutputId1 = Qt3DCore::QNodeId::createId();
- Qt3DCore::QNodeId renderTargetOutputId2 = Qt3DCore::QNodeId::createId();
- backendRenderTarget.appendRenderOutput(renderTargetOutputId1);
- backendRenderTarget.appendRenderOutput(renderTargetOutputId2);
-
- // THEN
- QCOMPARE(backendRenderTarget.renderOutputs().size(), 2);
-
- // WHEN
- backendRenderTarget.removeRenderOutput(Qt3DCore::QNodeId());
+ Qt3DRender::QRenderTargetOutput renderTargetOuput1;
+ Qt3DRender::QRenderTargetOutput renderTargetOuput2;
+ renderTarget.addOutput(&renderTargetOuput1);
+ renderTarget.addOutput(&renderTargetOuput2);
// THEN
+ backendRenderTarget.syncFromFrontEnd(&renderTarget, false);
QCOMPARE(backendRenderTarget.renderOutputs().size(), 2);
+ QCOMPARE(backendRenderTarget.isDirty(), true);
+ backendRenderTarget.unsetDirty();
// WHEN
- backendRenderTarget.removeRenderOutput(renderTargetOutputId1);
+ renderTarget.removeOutput(&renderTargetOuput1);
+ backendRenderTarget.syncFromFrontEnd(&renderTarget, false);
// THEN
QCOMPARE(backendRenderTarget.renderOutputs().size(), 1);
+ QCOMPARE(backendRenderTarget.isDirty(), true);
+ backendRenderTarget.unsetDirty();
// WHEN
- backendRenderTarget.removeRenderOutput(renderTargetOutputId1);
+ renderTarget.removeOutput(&renderTargetOuput1);
+ backendRenderTarget.syncFromFrontEnd(&renderTarget, false);
// THEN
QCOMPARE(backendRenderTarget.renderOutputs().size(), 1);
+ QCOMPARE(backendRenderTarget.isDirty(), false);
// WHEN
- backendRenderTarget.removeRenderOutput(renderTargetOutputId2);
+ renderTarget.removeOutput(&renderTargetOuput2);
+ backendRenderTarget.syncFromFrontEnd(&renderTarget, false);
// THEN
QCOMPARE(backendRenderTarget.renderOutputs().size(), 0);
+ QCOMPARE(backendRenderTarget.isDirty(), true);
}
void checkSceneChangeEvents()
@@ -173,6 +203,7 @@ private Q_SLOTS:
TestRenderer renderer;
backendRenderTarget.setRenderer(&renderer);
simulateInitializationSync(&renderTarget, &backendRenderTarget);
+ backendRenderTarget.unsetDirty();
{
// WHEN
@@ -193,7 +224,9 @@ private Q_SLOTS:
QCOMPARE(backendRenderTarget.renderOutputs().size(), 1);
QCOMPARE(backendRenderTarget.renderOutputs().first(), targetOutput.id());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty);
+ QCOMPARE(backendRenderTarget.isDirty(), true);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ backendRenderTarget.unsetDirty();
// WHEN
renderTarget.removeOutput(&targetOutput);
@@ -202,7 +235,9 @@ private Q_SLOTS:
// THEN
QCOMPARE(backendRenderTarget.renderOutputs().size(), 0);
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty);
+ QCOMPARE(backendRenderTarget.isDirty(), true);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ backendRenderTarget.unsetDirty();
}
}