diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-01 03:00:42 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-10-01 03:00:42 +0200 |
commit | 73bfd21fcbe9f7f647edcbe19b7153ac4cc5c859 (patch) | |
tree | e814e94894d6974d93ac30eca21cbecf105d4ad9 /tests/auto | |
parent | 9ba07868d3ddedd2e39f9612118674cefd5fe1bf (diff) | |
parent | 621c19719e51d0b4c94a51f802f8a2128e201b85 (diff) |
Merge remote-tracking branch 'origin/5.14' into 5.15
Change-Id: Ie15f601b175beeb01d00050dadf3cb8952ed580a
Diffstat (limited to 'tests/auto')
19 files changed, 392 insertions, 432 deletions
diff --git a/tests/auto/input/axis/tst_axis.cpp b/tests/auto/input/axis/tst_axis.cpp index 42f7f56fc..8ad8098af 100644 --- a/tests/auto/input/axis/tst_axis.cpp +++ b/tests/auto/input/axis/tst_axis.cpp @@ -65,7 +65,7 @@ private Q_SLOTS: axis.addInput(&axisInput); // WHEN - simulateInitialization(&axis, &backendAxis); + simulateInitializationSync(&axis, &backendAxis); // THEN QCOMPARE(backendAxis.peerId(), axis.id()); @@ -97,7 +97,7 @@ private Q_SLOTS: axis.addInput(&axisInput); // WHEN - simulateInitialization(&axis, &backendAxis); + simulateInitializationSync(&axis, &backendAxis); backendAxis.setAxisValue(883.0f); backendAxis.cleanup(); @@ -110,33 +110,30 @@ private Q_SLOTS: void checkPropertyChanges() { // GIVEN + Qt3DInput::QAxis axis; Qt3DInput::Input::Axis backendAxis; - Qt3DCore::QPropertyUpdatedChangePtr updateChange; + simulateInitializationSync(&axis, &backendAxis); // WHEN - updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId()); - updateChange->setPropertyName("enabled"); - updateChange->setValue(true); - backendAxis.sceneChangeEvent(updateChange); + axis.setEnabled(false); + backendAxis.syncFromFrontEnd(&axis, false); // THEN - QCOMPARE(backendAxis.isEnabled(), true); + QCOMPARE(backendAxis.isEnabled(), false); // WHEN DummyAxisInput input; const Qt3DCore::QNodeId inputId = input.id(); - const auto nodeAddedChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &input); - nodeAddedChange->setPropertyName("input"); - backendAxis.sceneChangeEvent(nodeAddedChange); + axis.addInput(&input); + backendAxis.syncFromFrontEnd(&axis, false); // THEN QCOMPARE(backendAxis.inputs().size(), 1); QCOMPARE(backendAxis.inputs().first(), inputId); // WHEN - const auto nodeRemovedChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &input); - nodeRemovedChange->setPropertyName("input"); - backendAxis.sceneChangeEvent(nodeRemovedChange); + axis.removeInput(&input); + backendAxis.syncFromFrontEnd(&axis, false); // THEN QCOMPARE(backendAxis.inputs().size(), 0); diff --git a/tests/auto/input/qaxis/tst_qaxis.cpp b/tests/auto/input/qaxis/tst_qaxis.cpp index 35cee0bba..03ddcb76d 100644 --- a/tests/auto/input/qaxis/tst_qaxis.cpp +++ b/tests/auto/input/qaxis/tst_qaxis.cpp @@ -113,24 +113,20 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - Qt3DCore::QPropertyNodeAddedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>(); - QCOMPARE(change->propertyName(), "input"); - QCOMPARE(change->addedNodeId(), input->id()); - QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), axis.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN axis->removeInput(input); QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - Qt3DCore::QPropertyNodeRemovedChangePtr nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>(); - QCOMPARE(nodeRemovedChange->propertyName(), "input"); - QCOMPARE(nodeRemovedChange->removedNodeId(), input->id()); - QCOMPARE(nodeRemovedChange->type(), Qt3DCore::PropertyValueRemoved); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), axis.data()); arbiter.events.clear(); } diff --git a/tests/auto/render/computecommand/tst_computecommand.cpp b/tests/auto/render/computecommand/tst_computecommand.cpp index a82c3eeaf..990c0cd98 100644 --- a/tests/auto/render/computecommand/tst_computecommand.cpp +++ b/tests/auto/render/computecommand/tst_computecommand.cpp @@ -87,7 +87,7 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::ComputeCommand backendComputeCommand; backendComputeCommand.setRenderer(&renderer); - simulateInitialization(&computeCommand, &backendComputeCommand); + simulateInitializationSync(&computeCommand, &backendComputeCommand); // THEN QCOMPARE(backendComputeCommand.isEnabled(), true); @@ -105,7 +105,7 @@ private Q_SLOTS: Qt3DRender::Render::ComputeCommand backendComputeCommand; backendComputeCommand.setRenderer(&renderer); computeCommand.setEnabled(false); - simulateInitialization(&computeCommand, &backendComputeCommand); + simulateInitializationSync(&computeCommand, &backendComputeCommand); // THEN QCOMPARE(backendComputeCommand.peerId(), computeCommand.id()); @@ -118,16 +118,16 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::ComputeCommand backendComputeCommand; + Qt3DRender::QComputeCommand computeCommand; TestRenderer renderer; backendComputeCommand.setRenderer(&renderer); + simulateInitializationSync(&computeCommand, &backendComputeCommand); { // WHEN const bool newValue = false; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("enabled"); - change->setValue(newValue); - backendComputeCommand.sceneChangeEvent(change); + computeCommand.setEnabled(newValue); + backendComputeCommand.syncFromFrontEnd(&computeCommand, false); // THEN QCOMPARE(backendComputeCommand.isEnabled(), newValue); @@ -135,10 +135,8 @@ private Q_SLOTS: { // WHEN const int newValue = 128; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("workGroupX"); - change->setValue(newValue); - backendComputeCommand.sceneChangeEvent(change); + computeCommand.setWorkGroupX(newValue); + backendComputeCommand.syncFromFrontEnd(&computeCommand, false); // THEN QCOMPARE(backendComputeCommand.x(), newValue); @@ -146,10 +144,8 @@ private Q_SLOTS: { // WHEN const int newValue = 64; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("workGroupY"); - change->setValue(newValue); - backendComputeCommand.sceneChangeEvent(change); + computeCommand.setWorkGroupY(newValue); + backendComputeCommand.syncFromFrontEnd(&computeCommand, false); // THEN QCOMPARE(backendComputeCommand.y(), newValue); @@ -157,10 +153,8 @@ private Q_SLOTS: { // WHEN const int newValue = 32; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("workGroupZ"); - change->setValue(newValue); - backendComputeCommand.sceneChangeEvent(change); + computeCommand.setWorkGroupZ(newValue); + backendComputeCommand.syncFromFrontEnd(&computeCommand, false); // THEN QCOMPARE(backendComputeCommand.z(), newValue); @@ -168,10 +162,8 @@ private Q_SLOTS: { // WHEN const Qt3DRender::QComputeCommand::RunType newValue = Qt3DRender::QComputeCommand::Manual; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("runType"); - change->setValue(newValue); - backendComputeCommand.sceneChangeEvent(change); + computeCommand.setRunType(newValue); + backendComputeCommand.syncFromFrontEnd(&computeCommand, false); // THEN QCOMPARE(backendComputeCommand.runType(), newValue); @@ -179,10 +171,8 @@ private Q_SLOTS: { // WHEN const int newValue = 32; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("frameCount"); - change->setValue(newValue); - backendComputeCommand.sceneChangeEvent(change); + computeCommand.trigger(newValue); + backendComputeCommand.syncFromFrontEnd(&computeCommand, false); // THEN QCOMPARE(backendComputeCommand.frameCount(), newValue); @@ -208,7 +198,7 @@ private Q_SLOTS: Qt3DCore::QBackendNodePrivate::get(&backendComputeCommand)->setArbiter(&arbiter); backendComputeCommand.setRenderer(&renderer); - simulateInitialization(&computeCommand, &backendComputeCommand); + simulateInitializationSync(&computeCommand, &backendComputeCommand); for (int i = 0; i < 5; ++i) { // WHEN diff --git a/tests/auto/render/filterkey/tst_filterkey.cpp b/tests/auto/render/filterkey/tst_filterkey.cpp index 15d07d65f..c998cc603 100644 --- a/tests/auto/render/filterkey/tst_filterkey.cpp +++ b/tests/auto/render/filterkey/tst_filterkey.cpp @@ -56,16 +56,18 @@ private Q_SLOTS: void checkCleanupState() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::FilterKey backendFilterKey; // WHEN + backendFilterKey.setRenderer(&renderer); backendFilterKey.setEnabled(true); { Qt3DRender::QFilterKey filterKey; filterKey.setName(QStringLiteral("Tim")); filterKey.setValue(QVariant(QStringLiteral("McGraw"))); - simulateInitialization(&filterKey, &backendFilterKey); + simulateInitializationSync(&filterKey, &backendFilterKey); } backendFilterKey.cleanup(); @@ -79,6 +81,7 @@ private Q_SLOTS: void checkInitializeFromPeer() { // GIVEN + TestRenderer renderer; Qt3DRender::QFilterKey filterKey; filterKey.setName(QStringLiteral("Dallas")); filterKey.setValue(QVariant(QStringLiteral("Smith"))); @@ -86,7 +89,8 @@ private Q_SLOTS: { // WHEN Qt3DRender::Render::FilterKey backendFilterKey; - simulateInitialization(&filterKey, &backendFilterKey); + backendFilterKey.setRenderer(&renderer); + simulateInitializationSync(&filterKey, &backendFilterKey); // THEN QCOMPARE(backendFilterKey.isEnabled(), true); @@ -97,8 +101,9 @@ private Q_SLOTS: { // WHEN Qt3DRender::Render::FilterKey backendFilterKey; + backendFilterKey.setRenderer(&renderer); filterKey.setEnabled(false); - simulateInitialization(&filterKey, &backendFilterKey); + simulateInitializationSync(&filterKey, &backendFilterKey); // THEN QCOMPARE(backendFilterKey.peerId(), filterKey.id()); @@ -110,16 +115,16 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::FilterKey backendFilterKey; + Qt3DRender::QFilterKey frontend; TestRenderer renderer; backendFilterKey.setRenderer(&renderer); + simulateInitializationSync(&frontend, &backendFilterKey); { // WHEN const bool newValue = false; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("enabled"); - change->setValue(newValue); - backendFilterKey.sceneChangeEvent(change); + frontend.setEnabled(newValue); + backendFilterKey.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backendFilterKey.isEnabled(), newValue); @@ -127,10 +132,8 @@ private Q_SLOTS: { // WHEN const QVariant newValue(383.0f); - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("value"); - change->setValue(QVariant::fromValue(newValue)); - backendFilterKey.sceneChangeEvent(change); + frontend.setValue(newValue); + backendFilterKey.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backendFilterKey.value(), newValue); @@ -138,10 +141,8 @@ private Q_SLOTS: { // WHEN const QString newValue = QStringLiteral("Alan"); - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("name"); - change->setValue(QVariant::fromValue(newValue)); - backendFilterKey.sceneChangeEvent(change); + frontend.setName(newValue); + backendFilterKey.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backendFilterKey.name(), newValue); @@ -151,10 +152,15 @@ private Q_SLOTS: void checkComparison() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::FilterKey backendFilterKey1; Qt3DRender::Render::FilterKey backendFilterKey2; Qt3DRender::Render::FilterKey backendFilterKey3; Qt3DRender::Render::FilterKey backendFilterKey4; + backendFilterKey1.setRenderer(&renderer); + backendFilterKey2.setRenderer(&renderer); + backendFilterKey3.setRenderer(&renderer); + backendFilterKey4.setRenderer(&renderer); // WHEN { @@ -162,20 +168,20 @@ private Q_SLOTS: filterKey1.setName(QStringLiteral("Dallas")); filterKey1.setValue(QVariant(QStringLiteral("Smith"))); - simulateInitialization(&filterKey1, &backendFilterKey1); - simulateInitialization(&filterKey1, &backendFilterKey4); + simulateInitializationSync(&filterKey1, &backendFilterKey1); + simulateInitializationSync(&filterKey1, &backendFilterKey4); Qt3DRender::QFilterKey filterKey2; filterKey2.setName(QStringLiteral("Tim")); filterKey2.setValue(QVariant(QStringLiteral("Smith"))); - simulateInitialization(&filterKey2, &backendFilterKey2); + simulateInitializationSync(&filterKey2, &backendFilterKey2); Qt3DRender::QFilterKey filterKey3; filterKey3.setName(QStringLiteral("Dallas")); filterKey3.setValue(QVariant(QStringLiteral("McGraw"))); - simulateInitialization(&filterKey3, &backendFilterKey3); + simulateInitializationSync(&filterKey3, &backendFilterKey3); } // THEN diff --git a/tests/auto/render/levelofdetail/tst_levelofdetail.cpp b/tests/auto/render/levelofdetail/tst_levelofdetail.cpp index 148c54e58..2285cc5ff 100644 --- a/tests/auto/render/levelofdetail/tst_levelofdetail.cpp +++ b/tests/auto/render/levelofdetail/tst_levelofdetail.cpp @@ -45,11 +45,13 @@ private Q_SLOTS: void checkPeerPropertyMirroring() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::LevelOfDetail renderLod; Qt3DRender::QLevelOfDetail lod; // WHEN - simulateInitialization(&lod, &renderLod); + renderLod.setRenderer(&renderer); + simulateInitializationSync(&lod, &renderLod); // THEN QCOMPARE(renderLod.peerId(), lod.id()); @@ -82,7 +84,7 @@ private Q_SLOTS: // WHEN renderLod.setRenderer(&renderer); - simulateInitialization(&lod, &renderLod); + simulateInitializationSync(&lod, &renderLod); // THEN QCOMPARE(renderLod.thresholdType(), lod.thresholdType()); @@ -92,8 +94,10 @@ private Q_SLOTS: { // GIVEN TestRenderer renderer; + Qt3DRender::QLevelOfDetail lod; Qt3DRender::Render::LevelOfDetail renderLod; renderLod.setRenderer(&renderer); + simulateInitializationSync(&lod, &renderLod); // THEN QVERIFY(renderLod.thresholdType() != Qt3DRender::QLevelOfDetail::ProjectedScreenPixelSizeThreshold); @@ -101,38 +105,30 @@ private Q_SLOTS: { // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setValue(static_cast<int>(Qt3DRender::QLevelOfDetail::ProjectedScreenPixelSizeThreshold)); - updateChange->setPropertyName("thresholdType"); - renderLod.sceneChangeEvent(updateChange); + lod.setThresholdType(Qt3DRender::QLevelOfDetail::ProjectedScreenPixelSizeThreshold); + renderLod.syncFromFrontEnd(&lod, false); // THEN QCOMPARE(renderLod.thresholdType(), Qt3DRender::QLevelOfDetail::ProjectedScreenPixelSizeThreshold); - QVERIFY(renderer.dirtyBits() != 0); - } + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } { - QVector<qreal> thresholds = {20.f, 30.f, 40.f}; - QVariant v; - v.setValue<decltype(thresholds)>(thresholds); + const QVector<qreal> thresholds = {20.f, 30.f, 40.f}; // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setValue(v); - updateChange->setPropertyName("thresholds"); - renderLod.sceneChangeEvent(updateChange); - + lod.setThresholds(thresholds); + renderLod.syncFromFrontEnd(&lod, false); // THEN QCOMPARE(renderLod.thresholds(), thresholds); } { // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - Qt3DRender::QLevelOfDetailBoundingSphere sphere(QVector3D(1.0f, 2.0f, 3.0f), 1.0f); - updateChange->setValue(QVariant::fromValue(sphere)); - updateChange->setPropertyName("volumeOverride"); - renderLod.sceneChangeEvent(updateChange); + const Qt3DRender::QLevelOfDetailBoundingSphere sphere(QVector3D(1.0f, 2.0f, 3.0f), 1.0f); + // WHEN + lod.setVolumeOverride(sphere); + renderLod.syncFromFrontEnd(&lod, false); // THEN QCOMPARE(renderLod.center(), QVector3D(1., 2., 3.)); diff --git a/tests/auto/render/objectpicker/tst_objectpicker.cpp b/tests/auto/render/objectpicker/tst_objectpicker.cpp index 99b2af538..a8d9bd010 100644 --- a/tests/auto/render/objectpicker/tst_objectpicker.cpp +++ b/tests/auto/render/objectpicker/tst_objectpicker.cpp @@ -44,13 +44,15 @@ private Q_SLOTS: void checkPeerPropertyMirroring() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::ObjectPicker objectPicker; Qt3DRender::QObjectPicker picker; picker.setHoverEnabled(true); picker.setPriority(883); // WHEN - simulateInitialization(&picker, &objectPicker); + objectPicker.setRenderer(&renderer); + simulateInitializationSync(&picker, &objectPicker); // THEN QVERIFY(!objectPicker.peerId().isNull()); @@ -61,6 +63,7 @@ private Q_SLOTS: void checkInitialAndCleanedUpState() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::ObjectPicker objectPicker; // THEN @@ -76,7 +79,8 @@ private Q_SLOTS: picker.setPriority(1584); // WHEN - simulateInitialization(&picker, &objectPicker); + objectPicker.setRenderer(&renderer); + simulateInitializationSync(&picker, &objectPicker); objectPicker.cleanup(); // THEN @@ -90,42 +94,43 @@ private Q_SLOTS: // GIVEN TestRenderer renderer; { + Qt3DRender::QObjectPicker picker; Qt3DRender::Render::ObjectPicker objectPicker; objectPicker.setRenderer(&renderer); + simulateInitializationSync(&picker, &objectPicker); // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setValue(true); - updateChange->setPropertyName("hoverEnabled"); - objectPicker.sceneChangeEvent(updateChange); + picker.setHoverEnabled(true); + objectPicker.syncFromFrontEnd(&picker, false); // THEN QCOMPARE(objectPicker.isHoverEnabled(), true); QVERIFY(renderer.dirtyBits() != 0); } { + Qt3DRender::QObjectPicker picker; Qt3DRender::Render::ObjectPicker objectPicker; objectPicker.setRenderer(&renderer); + simulateInitializationSync(&picker, &objectPicker); // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setValue(true); - updateChange->setPropertyName("dragEnabled"); - objectPicker.sceneChangeEvent(updateChange); + picker.setDragEnabled(true); + objectPicker.syncFromFrontEnd(&picker, false); + // THEN QCOMPARE(objectPicker.isDragEnabled(), true); QVERIFY(renderer.dirtyBits() != 0); } { + Qt3DRender::QObjectPicker picker; Qt3DRender::Render::ObjectPicker objectPicker; objectPicker.setRenderer(&renderer); + simulateInitializationSync(&picker, &objectPicker); // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setValue(15); - updateChange->setPropertyName("priority"); - objectPicker.sceneChangeEvent(updateChange); + picker.setPriority(15); + objectPicker.syncFromFrontEnd(&picker, false); // THEN QCOMPARE(objectPicker.priority(), 15); diff --git a/tests/auto/render/qcomputecommand/tst_qcomputecommand.cpp b/tests/auto/render/qcomputecommand/tst_qcomputecommand.cpp index b46cc4ea0..4494e773b 100644 --- a/tests/auto/render/qcomputecommand/tst_qcomputecommand.cpp +++ b/tests/auto/render/qcomputecommand/tst_qcomputecommand.cpp @@ -342,13 +342,7 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - { - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "frameCount"); - QCOMPARE(change->value().value<int>(), 1); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - } + QCOMPARE(arbiter.events.size(), 0); QCOMPARE(arbiter.dirtyNodes.size(), 1); QCOMPARE(arbiter.dirtyNodes.front(), &computeCommand); QCOMPARE(computeCommand.isEnabled(), true); @@ -356,7 +350,6 @@ private Q_SLOTS: computeCommand.setEnabled(false); QCoreApplication::processEvents(); arbiter.dirtyNodes.clear(); - arbiter.events.clear(); } { @@ -365,13 +358,7 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - { - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "frameCount"); - QCOMPARE(change->value().value<int>(), 2); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - } + QCOMPARE(arbiter.events.size(), 0); QCOMPARE(arbiter.dirtyNodes.size(), 1); QCOMPARE(arbiter.dirtyNodes.front(), &computeCommand); QCOMPARE(computeCommand.isEnabled(), true); @@ -388,13 +375,7 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - { - auto change = arbiter.events.at(0).staticCast<Qt3DCore::QPropertyUpdatedChange>(); - QCOMPARE(change->propertyName(), "frameCount"); - QCOMPARE(change->value().value<int>(), 1); - QCOMPARE(change->type(), Qt3DCore::PropertyUpdated); - } + QCOMPARE(arbiter.events.size(), 0); QCOMPARE(arbiter.dirtyNodes.size(), 1); QCOMPARE(arbiter.dirtyNodes.front(), &computeCommand); QCOMPARE(computeCommand.isEnabled(), true); diff --git a/tests/auto/render/qrenderstate/tst_qrenderstate.cpp b/tests/auto/render/qrenderstate/tst_qrenderstate.cpp index 63319b42c..fb212bc8f 100644 --- a/tests/auto/render/qrenderstate/tst_qrenderstate.cpp +++ b/tests/auto/render/qrenderstate/tst_qrenderstate.cpp @@ -75,8 +75,8 @@ private: RenderStateNode* createBackendNode(QRenderState *frontend) { RenderStateNode *backend = m_renderStateManager.getOrCreateResource(frontend->id()); - simulateInitialization(frontend, backend); backend->setRenderer(&m_renderer); + simulateInitializationSync(frontend, backend); return backend; } @@ -187,6 +187,7 @@ private Q_SLOTS: // THEN RenderStateNode *backend1 = createBackendNode(frontend1); RenderStateNode *backend2 = createBackendNode(frontend2); + QVERIFY(backend1->type() == mask); QVERIFY(backend2->type() == mask); QVERIFY(backend1->impl() != backend2->impl()); @@ -204,12 +205,11 @@ private Q_SLOTS: QCOMPARE(arbiter.dirtyNodes.size(), 1); QCOMPARE(arbiter.dirtyNodes.front(), frontend1); - // TODOSYNC update when syncFromFrontendNode is implemented -// // WHEN -// backend1->sceneChangeEvent(change.staticCast<QSceneChange>()); + // WHEN + backend1->syncFromFrontEnd(frontend1, false); -// // THEN -// QVERIFY(backend1->impl() == backend2->impl()); + // THEN + QVERIFY(backend1->impl() == backend2->impl()); arbiter.dirtyNodes.clear(); } @@ -285,12 +285,12 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<QPropertyUpdatedChange>(); - QCOMPARE(change->subjectId(), frontend1->id()); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), frontend1); // WHEN - backend1->sceneChangeEvent(change.staticCast<QSceneChange>()); + backend1->syncFromFrontEnd(frontend1, false); // THEN QVERIFY(backend1->impl() == backend2->impl()); diff --git a/tests/auto/render/qrendertarget/tst_qrendertarget.cpp b/tests/auto/render/qrendertarget/tst_qrendertarget.cpp index 03a9e5f94..ffb17faea 100644 --- a/tests/auto/render/qrendertarget/tst_qrendertarget.cpp +++ b/tests/auto/render/qrendertarget/tst_qrendertarget.cpp @@ -167,13 +167,11 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>(); - QCOMPARE(change->propertyName(), "output"); - QCOMPARE(change->addedNodeId(), renderTargetOutput.id()); - QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &renderTarget); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } { @@ -182,13 +180,11 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>(); - QCOMPARE(change->propertyName(), "output"); - QCOMPARE(change->removedNodeId(), renderTargetOutput.id()); - QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &renderTarget); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } } }; diff --git a/tests/auto/render/raycaster/tst_raycaster.cpp b/tests/auto/render/raycaster/tst_raycaster.cpp index 4d30c6d45..357517f0d 100644 --- a/tests/auto/render/raycaster/tst_raycaster.cpp +++ b/tests/auto/render/raycaster/tst_raycaster.cpp @@ -44,6 +44,7 @@ private Q_SLOTS: void checkPeerPropertyMirroring() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::RayCaster rayCaster; Qt3DRender::QRayCaster caster; caster.setRunMode(Qt3DRender::QRayCaster::Continuous); @@ -52,7 +53,8 @@ private Q_SLOTS: caster.setLength(42.f); // WHEN - simulateInitialization(&caster, &rayCaster); + rayCaster.setRenderer(&renderer); + simulateInitializationSync(&caster, &rayCaster); // THEN QVERIFY(!rayCaster.peerId().isNull()); @@ -65,6 +67,7 @@ private Q_SLOTS: void checkInitialAndCleanedUpState() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::RayCaster rayCaster; // THEN @@ -76,7 +79,8 @@ private Q_SLOTS: caster.setRunMode(Qt3DRender::QRayCaster::Continuous); // WHEN - simulateInitialization(&caster, &rayCaster); + rayCaster.setRenderer(&renderer); + simulateInitializationSync(&caster, &rayCaster); rayCaster.cleanup(); // THEN @@ -88,14 +92,14 @@ private Q_SLOTS: // GIVEN TestRenderer renderer; { + Qt3DRender::QRayCaster caster; Qt3DRender::Render::RayCaster rayCaster; rayCaster.setRenderer(&renderer); + simulateInitializationSync(&caster, &rayCaster); // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setValue(Qt3DRender::QRayCaster::Continuous); - updateChange->setPropertyName("runMode"); - rayCaster.sceneChangeEvent(updateChange); + caster.setRunMode(Qt3DRender::QRayCaster::Continuous); + rayCaster.syncFromFrontEnd(&caster, false); // THEN QCOMPARE(rayCaster.runMode(), Qt3DRender::QRayCaster::Continuous); diff --git a/tests/auto/render/renderer/tst_renderer.cpp b/tests/auto/render/renderer/tst_renderer.cpp index 973192d6a..e1bf8dfd9 100644 --- a/tests/auto/render/renderer/tst_renderer.cpp +++ b/tests/auto/render/renderer/tst_renderer.cpp @@ -36,6 +36,7 @@ #include <Qt3DRender/private/renderviewbuilder_p.h> #include <Qt3DRender/private/offscreensurfacehelper_p.h> #include <Qt3DRender/private/renderqueue_p.h> +#include <Qt3DRender/private/job_common_p.h> class tst_Renderer : public QObject { @@ -170,9 +171,24 @@ private Q_SLOTS: // syncRenderViewCommandBuilderJob // n * (RenderViewCommandBuildJobs) - // WHEN (nothing dirty, no buffers, no layers to be rebuilt, no materials to be rebuilt) + // WHEN QVector<Qt3DCore::QAspectJobPtr> jobs = renderer.renderBinJobs(); + // THEN + QCOMPARE(jobs.size(), + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // VAOGatherer + 1 + // updateSkinningPaletteJob + 1); // SyncLoadingJobs + + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); + renderQueue->reset(); + + // WHEN (nothing dirty, no buffers, no layers to be rebuilt, no materials to be rebuilt) + renderer.markDirty(Qt3DRender::Render::AbstractRenderer::FrameGraphDirty, nullptr); + jobs = renderer.renderBinJobs(); + // THEN (level QCOMPARE(jobs.size(), 1 + // updateLevelOfDetailJob @@ -180,7 +196,9 @@ private Q_SLOTS: 1 + // VAOGatherer 1 + // updateSkinningPaletteJob 1 + // SyncLoadingJobs - singleRenderViewJobCount); // Only valid for the first call to renderBinJobs(), since subsequent calls won't have the renderqueue reset + singleRenderViewJobCount + + renderViewBuilderMaterialCacheJobCount + + layerCacheJobCount); renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); renderQueue->reset(); @@ -298,23 +316,6 @@ private Q_SLOTS: renderQueue->reset(); // WHEN - renderer.markDirty(Qt3DRender::Render::AbstractRenderer::FrameGraphDirty, nullptr); - jobs = renderer.renderBinJobs(); - - QCOMPARE(jobs.size(), - 1 + // updateLevelOfDetailJob - 1 + // cleanupJob - 1 + // VAOGatherer - 1 + // updateSkinningPaletteJob - 1 + // SyncLoadingJobs - singleRenderViewJobCount + - layerCacheJobCount + - renderViewBuilderMaterialCacheJobCount); - - renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); - renderQueue->reset(); - - // WHEN renderer.markDirty(Qt3DRender::Render::AbstractRenderer::AllDirty, nullptr); jobs = renderer.renderBinJobs(); diff --git a/tests/auto/render/renderpass/tst_renderpass.cpp b/tests/auto/render/renderpass/tst_renderpass.cpp index 7be741936..136e2755d 100644 --- a/tests/auto/render/renderpass/tst_renderpass.cpp +++ b/tests/auto/render/renderpass/tst_renderpass.cpp @@ -148,6 +148,7 @@ private slots: backend.setRenderer(&renderer); RenderStateNode *backendState = m_renderStateManager->getOrCreateResource(frontendState->id()); + backendState->setRenderer(&renderer); simulateInitializationSync(frontendState, backendState); // WHEN @@ -262,6 +263,7 @@ private slots: backend.setRenderer(&renderer); RenderStateNode *backendState = m_renderStateManager->getOrCreateResource(frontendState->id()); + backendState->setRenderer(&renderer); simulateInitializationSync(frontendState, backendState); QRenderPass frontend; diff --git a/tests/auto/render/rendertarget/tst_rendertarget.cpp b/tests/auto/render/rendertarget/tst_rendertarget.cpp index a5d8cad77..cd7b0978a 100644 --- a/tests/auto/render/rendertarget/tst_rendertarget.cpp +++ b/tests/auto/render/rendertarget/tst_rendertarget.cpp @@ -75,6 +75,7 @@ private Q_SLOTS: void checkInitializeFromPeer() { // GIVEN + TestRenderer renderer; Qt3DRender::QRenderTarget renderTarget; Qt3DRender::QRenderTargetOutput renderTargetOuput; renderTarget.addOutput(&renderTargetOuput); @@ -82,8 +83,8 @@ private Q_SLOTS: { // WHEN Qt3DRender::Render::RenderTarget backendRenderTarget; - simulateInitialization(&renderTarget, &backendRenderTarget); - + backendRenderTarget.setRenderer(&renderer); + simulateInitializationSync(&renderTarget, &backendRenderTarget); // THEN QCOMPARE(backendRenderTarget.isEnabled(), true); QCOMPARE(backendRenderTarget.peerId(), renderTarget.id()); @@ -93,7 +94,8 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::RenderTarget backendRenderTarget; renderTarget.setEnabled(false); - simulateInitialization(&renderTarget, &backendRenderTarget); + backendRenderTarget.setRenderer(&renderer); + simulateInitializationSync(&renderTarget, &backendRenderTarget); // THEN QCOMPARE(backendRenderTarget.peerId(), renderTarget.id()); @@ -168,17 +170,17 @@ private Q_SLOTS: void checkSceneChangeEvents() { // GIVEN + Qt3DRender::QRenderTarget renderTarget; Qt3DRender::Render::RenderTarget backendRenderTarget; TestRenderer renderer; backendRenderTarget.setRenderer(&renderer); + simulateInitializationSync(&renderTarget, &backendRenderTarget); { // WHEN const bool newValue = false; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("enabled"); - change->setValue(newValue); - backendRenderTarget.sceneChangeEvent(change); + renderTarget.setEnabled(newValue); + backendRenderTarget.syncFromFrontEnd(&renderTarget, false); // THEN QCOMPARE(backendRenderTarget.isEnabled(), newValue); @@ -186,21 +188,23 @@ private Q_SLOTS: { // WHEN Qt3DRender::QRenderTargetOutput targetOutput; - const auto addChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &targetOutput); - addChange->setPropertyName("output"); - backendRenderTarget.sceneChangeEvent(addChange); + renderTarget.addOutput(&targetOutput); + backendRenderTarget.syncFromFrontEnd(&renderTarget, false); // THEN QCOMPARE(backendRenderTarget.renderOutputs().size(), 1); QCOMPARE(backendRenderTarget.renderOutputs().first(), targetOutput.id()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); // WHEN - const auto removeChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &targetOutput); - removeChange->setPropertyName("output"); - backendRenderTarget.sceneChangeEvent(removeChange); + renderTarget.removeOutput(&targetOutput); + backendRenderTarget.syncFromFrontEnd(&renderTarget, false); // THEN QCOMPARE(backendRenderTarget.renderOutputs().size(), 0); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } } diff --git a/tests/auto/render/sceneloader/tst_sceneloader.cpp b/tests/auto/render/sceneloader/tst_sceneloader.cpp index 8da82b609..e5ea8b6c1 100644 --- a/tests/auto/render/sceneloader/tst_sceneloader.cpp +++ b/tests/auto/render/sceneloader/tst_sceneloader.cpp @@ -46,6 +46,7 @@ private Q_SLOTS: void checkInitialAndCleanedUpState() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::Scene sceneLoader; Qt3DRender::Render::SceneManager sceneManager; @@ -61,8 +62,9 @@ private Q_SLOTS: frontendSceneLoader.setSource(newUrl); // WHEN + sceneLoader.setRenderer(&renderer); sceneLoader.setSceneManager(&sceneManager); - simulateInitialization(&frontendSceneLoader, &sceneLoader); + simulateInitializationSync(&frontendSceneLoader, &sceneLoader); // THEN QVERIFY(!sceneLoader.peerId().isNull()); @@ -78,6 +80,7 @@ private Q_SLOTS: void checkPeerPropertyMirroring() { // GIVEN + TestRenderer renderer; Qt3DRender::QSceneLoader frontendSceneLoader; frontendSceneLoader.setSource(QUrl(QStringLiteral("file:///CorvetteMuseum"))); @@ -85,8 +88,9 @@ private Q_SLOTS: Qt3DRender::Render::SceneManager sceneManager; // WHEN + sceneLoader.setRenderer(&renderer); sceneLoader.setSceneManager(&sceneManager); - simulateInitialization(&frontendSceneLoader, &sceneLoader); + simulateInitializationSync(&frontendSceneLoader, &sceneLoader); // THEN QCOMPARE(sceneLoader.peerId(), frontendSceneLoader.id()); @@ -100,29 +104,27 @@ private Q_SLOTS: TestRenderer renderer; Qt3DRender::Render::Scene sceneLoader; Qt3DRender::Render::SceneManager sceneManager; + Qt3DRender::QSceneLoader frontendSceneLoader; sceneLoader.setRenderer(&renderer); sceneLoader.setSceneManager(&sceneManager); + simulateInitializationSync(&frontendSceneLoader, &sceneLoader); // THEN QVERIFY(sceneManager.takePendingSceneLoaderJobs().isEmpty()); // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); const QUrl newUrl(QStringLiteral("file:///Bownling_Green_KY")); - updateChange->setValue(newUrl); - updateChange->setPropertyName("source"); - sceneLoader.sceneChangeEvent(updateChange); + frontendSceneLoader.setSource(newUrl); + sceneLoader.syncFromFrontEnd(&frontendSceneLoader, false); // THEN QCOMPARE(sceneLoader.source(), newUrl); QVERIFY(!sceneManager.takePendingSceneLoaderJobs().isEmpty()); // WHEN - updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId()); - updateChange->setValue(false); - updateChange->setPropertyName("enabled"); - sceneLoader.sceneChangeEvent(updateChange); + frontendSceneLoader.setEnabled(false); + sceneLoader.syncFromFrontEnd(&frontendSceneLoader, false); // THEN QCOMPARE(sceneLoader.isEnabled(), false); @@ -179,29 +181,27 @@ private Q_SLOTS: TestRenderer renderer; Qt3DRender::Render::Scene sceneLoader; Qt3DRender::Render::SceneManager sceneManager; + Qt3DRender::QSceneLoader frontendSceneLoader; sceneLoader.setRenderer(&renderer); sceneLoader.setSceneManager(&sceneManager); + simulateInitializationSync(&frontendSceneLoader, &sceneLoader); // THEN QVERIFY(sceneManager.takePendingSceneLoaderJobs().isEmpty()); // WHEN - Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); const QUrl newUrl(QStringLiteral("file:///Bownling_Green_KY")); - updateChange->setValue(newUrl); - updateChange->setPropertyName("source"); - sceneLoader.sceneChangeEvent(updateChange); + frontendSceneLoader.setSource(newUrl); + sceneLoader.syncFromFrontEnd(&frontendSceneLoader, false); // THEN QCOMPARE(sceneLoader.source(), newUrl); QVERIFY(!sceneManager.takePendingSceneLoaderJobs().isEmpty()); // WHEN - updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setValue(QUrl()); - updateChange->setPropertyName("source"); - sceneLoader.sceneChangeEvent(updateChange); + frontendSceneLoader.setSource(QUrl()); + sceneLoader.syncFromFrontEnd(&frontendSceneLoader, false); // THEN -> we should still have generated a job to reset the scene (immediately) QCOMPARE(sceneLoader.source(), QUrl()); diff --git a/tests/auto/render/shader/tst_shader.cpp b/tests/auto/render/shader/tst_shader.cpp index 067db55e7..bfebe2467 100644 --- a/tests/auto/render/shader/tst_shader.cpp +++ b/tests/auto/render/shader/tst_shader.cpp @@ -97,7 +97,7 @@ void tst_RenderShader::matchesFrontendPeer() Qt3DRender::Render::Shader backend; backend.setRenderer(&renderer); - simulateInitialization(frontend.data(), &backend); + simulateInitializationSync(frontend.data(), &backend); QCOMPARE(backend.isLoaded(), false); QVERIFY(backend.dna() != 0U); @@ -113,7 +113,7 @@ void tst_RenderShader::cleanupLeavesACoherentState() Qt3DRender::Render::Shader shader; shader.setRenderer(&renderer); - simulateInitialization(frontend.data(), &shader); + simulateInitializationSync(frontend.data(), &shader); shader.cleanup(); @@ -130,73 +130,61 @@ void tst_RenderShader::cleanupLeavesACoherentState() void tst_RenderShader::dealWithPropertyChanges_data() { - QTest::addColumn<QByteArray>("property"); QTest::addColumn<Qt3DRender::QShaderProgram::ShaderType>("type"); - QTest::newRow("vertex") << QByteArrayLiteral("vertexShaderCode") - << Qt3DRender::QShaderProgram::Vertex; + QTest::newRow("vertex") << Qt3DRender::QShaderProgram::Vertex; - QTest::newRow("tessControl") << QByteArrayLiteral("tessellationControlShaderCode") - << Qt3DRender::QShaderProgram::TessellationControl; + QTest::newRow("tessControl") << Qt3DRender::QShaderProgram::TessellationControl; - QTest::newRow("tessEval") << QByteArrayLiteral("tessellationEvaluationShaderCode") - << Qt3DRender::QShaderProgram::TessellationEvaluation; + QTest::newRow("tessEval") << Qt3DRender::QShaderProgram::TessellationEvaluation; - QTest::newRow("geometry") << QByteArrayLiteral("geometryShaderCode") - << Qt3DRender::QShaderProgram::Geometry; + QTest::newRow("geometry") << Qt3DRender::QShaderProgram::Geometry; - QTest::newRow("fragment") << QByteArrayLiteral("fragmentShaderCode") - << Qt3DRender::QShaderProgram::Fragment; + QTest::newRow("fragment") << Qt3DRender::QShaderProgram::Fragment; - QTest::newRow("compute") << QByteArrayLiteral("computeShaderCode") - << Qt3DRender::QShaderProgram::Compute; + QTest::newRow("compute") << Qt3DRender::QShaderProgram::Compute; } void tst_RenderShader::dealWithPropertyChanges() { // GIVEN - QFETCH(QByteArray, property); QFETCH(Qt3DRender::QShaderProgram::ShaderType, type); Qt3DRender::Render::Shader backend; + Qt3DRender::QShaderProgram shader; backend.setLoaded(true); TestRenderer renderer; backend.setRenderer(&renderer); + simulateInitializationSync(&shader, &backend); // WHEN - auto updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QStringLiteral("foo")); - updateChange->setPropertyName(property); - backend.sceneChangeEvent(updateChange); + shader.setShaderCode(type, QByteArrayLiteral("foo")); + backend.syncFromFrontEnd(&shader, false); // THEN - QCOMPARE(backend.shaderCode().at(type), QStringLiteral("foo")); + QCOMPARE(backend.shaderCode().at(type), QByteArrayLiteral("foo")); QVERIFY(!backend.isLoaded()); QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty); renderer.resetDirty(); backend.setLoaded(true); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QStringLiteral("foo")); - updateChange->setPropertyName(property); - backend.sceneChangeEvent(updateChange); + shader.setShaderCode(type, QByteArrayLiteral("foo")); + backend.syncFromFrontEnd(&shader, false); // THEN - QCOMPARE(backend.shaderCode().at(type), QStringLiteral("foo")); + QCOMPARE(backend.shaderCode().at(type), QByteArrayLiteral("foo")); QVERIFY(backend.isLoaded()); QCOMPARE(renderer.dirtyBits(), 0); renderer.resetDirty(); backend.setLoaded(true); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QStringLiteral("bar")); - updateChange->setPropertyName(property); - backend.sceneChangeEvent(updateChange); + shader.setShaderCode(type, QByteArrayLiteral("bar")); + backend.syncFromFrontEnd(&shader, false); // THEN - QCOMPARE(backend.shaderCode().at(type), QStringLiteral("bar")); + QCOMPARE(backend.shaderCode().at(type), QByteArrayLiteral("bar")); QVERIFY(!backend.isLoaded()); QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty); renderer.resetDirty(); @@ -216,7 +204,7 @@ void tst_RenderShader::checkSetRendererDirtyOnInitialization() QCOMPARE(renderer.dirtyBits(), 0); // WHEN - simulateInitialization(frontend.data(), &shader); + simulateInitializationSync(frontend.data(), &shader); // THEN QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty); diff --git a/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp b/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp index e365256cc..c9a290dbd 100644 --- a/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp +++ b/tests/auto/render/shaderbuilder/tst_shaderbuilder.cpp @@ -141,9 +141,11 @@ private slots: // GIVEN QFETCH(Qt3DRender::QShaderProgramBuilder*, frontend); Qt3DRender::Render::ShaderBuilder backend; + TestRenderer renderer; // WHEN - simulateInitialization(frontend, &backend); + backend.setRenderer(&renderer); + simulateInitializationSync(frontend, &backend); // THEN QVERIFY(backend.isEnabled() == frontend->isEnabled()); @@ -199,25 +201,14 @@ private slots: { // GIVEN Qt3DRender::Render::ShaderBuilder backend; + Qt3DRender::QShaderProgramBuilder frontend; TestRenderer renderer; backend.setRenderer(&renderer); + simulateInitializationSync(&frontend, &backend); // WHEN - auto updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(true); - updateChange->setPropertyName("enabled"); - backend.sceneChangeEvent(updateChange); - - // THEN - QVERIFY(backend.isEnabled()); - QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty); - renderer.resetDirty(); - - // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(false); - updateChange->setPropertyName("enabled"); - backend.sceneChangeEvent(updateChange); + frontend.setEnabled(false); + backend.syncFromFrontEnd(&frontend, false); // THEN QVERIFY(!backend.isEnabled()); @@ -225,10 +216,8 @@ private slots: renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(true); - updateChange->setPropertyName("enabled"); - backend.sceneChangeEvent(updateChange); + frontend.setEnabled(true); + backend.syncFromFrontEnd(&frontend, false); // AND backend.cleanup(); @@ -242,26 +231,24 @@ private slots: { // GIVEN Qt3DRender::Render::ShaderBuilder backend; + Qt3DRender::QShaderProgramBuilder frontend; TestRenderer renderer; backend.setRenderer(&renderer); - const auto programId = Qt3DCore::QNodeId::createId(); + simulateInitializationSync(&frontend, &backend); // WHEN - auto updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QVariant::fromValue(programId)); - updateChange->setPropertyName("shaderProgram"); - backend.sceneChangeEvent(updateChange); + Qt3DRender::QShaderProgram prog; + frontend.setShaderProgram(&prog); + backend.syncFromFrontEnd(&frontend, false); // THEN - QCOMPARE(backend.shaderProgramId(), programId); + QCOMPARE(backend.shaderProgramId(), prog.id()); QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty); renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QVariant::fromValue(Qt3DCore::QNodeId())); - updateChange->setPropertyName("shaderProgram"); - backend.sceneChangeEvent(updateChange); + frontend.setShaderProgram(nullptr); + backend.syncFromFrontEnd(&frontend, false); // THEN QVERIFY(backend.shaderProgramId().isNull()); @@ -269,10 +256,8 @@ private slots: renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QVariant::fromValue(programId)); - updateChange->setPropertyName("shaderProgram"); - backend.sceneChangeEvent(updateChange); + frontend.setShaderProgram(&prog); + backend.syncFromFrontEnd(&frontend, false); // AND backend.cleanup(); @@ -286,21 +271,34 @@ private slots: { // GIVEN Qt3DRender::Render::ShaderBuilder backend; + Qt3DRender::QShaderProgramBuilder frontend; TestRenderer renderer; backend.setRenderer(&renderer); + simulateInitializationSync(&frontend, &backend); 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); + static const std::pair< + Qt3DRender::Render::ShaderBuilder::ShaderType, + void (Qt3DRender::QShaderProgramBuilder::*)(const QUrl &) + > + shaderTypesToSetters[] = { + {Qt3DRender::Render::ShaderBuilder::Vertex, &Qt3DRender::QShaderProgramBuilder::setVertexShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::TessellationControl, &Qt3DRender::QShaderProgramBuilder::setTessellationControlShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::TessellationEvaluation, &Qt3DRender::QShaderProgramBuilder::setTessellationEvaluationShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::Geometry, &Qt3DRender::QShaderProgramBuilder::setGeometryShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::Fragment, &Qt3DRender::QShaderProgramBuilder::setFragmentShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::Compute, &Qt3DRender::QShaderProgramBuilder::setComputeShaderGraph}, + }; + + + for (auto it = std::begin(shaderTypesToSetters), end = std::end(shaderTypesToSetters); it != end; ++it) { const auto graphUrl = QUrl::fromEncoded("qrc:/input.json"); - backend.setShaderGraph(type, graphUrl); + (frontend.*(it->second))(graphUrl); } // WHEN - auto updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(layers); - updateChange->setPropertyName("enabledLayers"); - backend.sceneChangeEvent(updateChange); + frontend.setEnabledLayers(layers); + backend.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backend.enabledLayers(), layers); @@ -313,10 +311,8 @@ private slots: renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(layers); - updateChange->setPropertyName("enabledLayers"); - backend.sceneChangeEvent(updateChange); + frontend.setEnabledLayers(layers); + backend.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backend.enabledLayers(), layers); @@ -325,14 +321,12 @@ private slots: QVERIFY(!backend.isShaderCodeDirty(type)); backend.generateCode(type); // Resets the dirty flag } - QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty); + QCOMPARE(renderer.dirtyBits(), 0); renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QStringList()); - updateChange->setPropertyName("enabledLayers"); - backend.sceneChangeEvent(updateChange); + frontend.setEnabledLayers(QStringList()); + backend.syncFromFrontEnd(&frontend, false); // THEN QVERIFY(backend.shaderProgramId().isNull()); @@ -345,10 +339,8 @@ private slots: renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(layers); - updateChange->setPropertyName("enabledLayers"); - backend.sceneChangeEvent(updateChange); + frontend.setEnabledLayers(layers); + backend.syncFromFrontEnd(&frontend, false); // AND backend.cleanup(); @@ -365,64 +357,68 @@ private slots: void shouldHandleShaderGraphPropertiesChanges_data() { - QTest::addColumn<QByteArray>("property"); QTest::addColumn<Qt3DRender::Render::ShaderBuilder::ShaderType>("type"); QTest::addColumn<QUrl>("graphUrl"); - QTest::newRow("vertex") << QByteArrayLiteral("vertexShaderGraph") - << Qt3DRender::Render::ShaderBuilder::Vertex + QTest::newRow("vertex") << Qt3DRender::Render::ShaderBuilder::Vertex << QUrl::fromEncoded("qrc:/vertex.json"); - QTest::newRow("tessControl") << QByteArrayLiteral("tessellationControlShaderGraph") - << Qt3DRender::Render::ShaderBuilder::TessellationControl + QTest::newRow("tessControl") << Qt3DRender::Render::ShaderBuilder::TessellationControl << QUrl::fromEncoded("qrc:/tesscontrol.json"); - QTest::newRow("tessEval") << QByteArrayLiteral("tessellationEvaluationShaderGraph") - << Qt3DRender::Render::ShaderBuilder::TessellationEvaluation + QTest::newRow("tessEval") << Qt3DRender::Render::ShaderBuilder::TessellationEvaluation << QUrl::fromEncoded("qrc:/tesseval.json"); - QTest::newRow("geometry") << QByteArrayLiteral("geometryShaderGraph") - << Qt3DRender::Render::ShaderBuilder::Geometry + QTest::newRow("geometry") << Qt3DRender::Render::ShaderBuilder::Geometry << QUrl::fromEncoded("qrc:/geometry.json"); - QTest::newRow("fragment") << QByteArrayLiteral("fragmentShaderGraph") - << Qt3DRender::Render::ShaderBuilder::Fragment + QTest::newRow("fragment") << Qt3DRender::Render::ShaderBuilder::Fragment << QUrl::fromEncoded("qrc:/fragment.json"); - QTest::newRow("compute") << QByteArrayLiteral("computeShaderGraph") - << Qt3DRender::Render::ShaderBuilder::Compute + QTest::newRow("compute") << Qt3DRender::Render::ShaderBuilder::Compute << QUrl::fromEncoded("qrc:/compute.json"); } void shouldHandleShaderGraphPropertiesChanges() { // GIVEN - QFETCH(QByteArray, property); QFETCH(Qt3DRender::Render::ShaderBuilder::ShaderType, type); QFETCH(QUrl, graphUrl); Qt3DRender::Render::ShaderBuilder backend; + Qt3DRender::QShaderProgramBuilder frontend; TestRenderer renderer; backend.setRenderer(&renderer); + simulateInitializationSync(&frontend, &backend); + + static const QHash< + Qt3DRender::Render::ShaderBuilder::ShaderType, + void (Qt3DRender::QShaderProgramBuilder::*)(const QUrl &) + > + shaderTypesToSetters = { + {Qt3DRender::Render::ShaderBuilder::Vertex, &Qt3DRender::QShaderProgramBuilder::setVertexShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::TessellationControl, &Qt3DRender::QShaderProgramBuilder::setTessellationControlShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::TessellationEvaluation, &Qt3DRender::QShaderProgramBuilder::setTessellationEvaluationShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::Geometry, &Qt3DRender::QShaderProgramBuilder::setGeometryShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::Fragment, &Qt3DRender::QShaderProgramBuilder::setFragmentShaderGraph}, + {Qt3DRender::Render::ShaderBuilder::Compute, &Qt3DRender::QShaderProgramBuilder::setComputeShaderGraph}, + }; // WHEN - auto updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QUrl()); - updateChange->setPropertyName(property); - backend.sceneChangeEvent(updateChange); + + (frontend.*(shaderTypesToSetters[type]))(QUrl()); + backend.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backend.shaderGraph(type), QUrl()); QVERIFY(!backend.isShaderCodeDirty(type)); QVERIFY(backend.shaderCode(type).isEmpty()); - QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty); + QCOMPARE(renderer.dirtyBits(), 0); renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(graphUrl); - updateChange->setPropertyName(property); - backend.sceneChangeEvent(updateChange); + (frontend.*(shaderTypesToSetters[type]))(graphUrl); + backend.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backend.shaderGraph(type), graphUrl); @@ -432,10 +428,8 @@ private slots: renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(QUrl()); - updateChange->setPropertyName(property); - backend.sceneChangeEvent(updateChange); + (frontend.*(shaderTypesToSetters[type]))(QUrl()); + backend.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backend.shaderGraph(type), QUrl()); @@ -445,10 +439,8 @@ private slots: renderer.resetDirty(); // WHEN - updateChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - updateChange->setValue(graphUrl); - updateChange->setPropertyName(property); - backend.sceneChangeEvent(updateChange); + (frontend.*(shaderTypesToSetters[type]))(graphUrl); + backend.syncFromFrontEnd(&frontend, false); // AND backend.cleanup(); diff --git a/tests/auto/render/shaderimage/tst_shaderimage.cpp b/tests/auto/render/shaderimage/tst_shaderimage.cpp index 6f1e691cc..6b2fc8ad7 100644 --- a/tests/auto/render/shaderimage/tst_shaderimage.cpp +++ b/tests/auto/render/shaderimage/tst_shaderimage.cpp @@ -42,6 +42,7 @@ #include <Qt3DRender/private/qshaderimage_p.h> #include <Qt3DRender/private/shaderimage_p.h> #include <Qt3DCore/qpropertyupdatedchange.h> +#include <Qt3DRender/qtexture.h> #include "qbackendnodetester.h" #include "testrenderer.h" @@ -98,11 +99,13 @@ private Q_SLOTS: { // GIVEN Qt3DRender::QShaderImage shaderImage; + TestRenderer renderer; { // WHEN Qt3DRender::Render::ShaderImage backendShaderImage; - simulateInitialization(&shaderImage, &backendShaderImage); + backendShaderImage.setRenderer(&renderer); + simulateInitializationSync(&shaderImage, &backendShaderImage); // THEN QCOMPARE(backendShaderImage.isEnabled(), true); @@ -118,7 +121,8 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::ShaderImage backendShaderImage; shaderImage.setEnabled(false); - simulateInitialization(&shaderImage, &backendShaderImage); + backendShaderImage.setRenderer(&renderer); + simulateInitializationSync(&shaderImage, &backendShaderImage); // THEN QCOMPARE(backendShaderImage.peerId(), shaderImage.id()); @@ -129,39 +133,35 @@ private Q_SLOTS: void checkSceneChangeEvents() { // GIVEN + Qt3DRender::QShaderImage shaderImage; Qt3DRender::Render::ShaderImage backendShaderImage; TestRenderer renderer; backendShaderImage.setRenderer(&renderer); + simulateInitializationSync(&shaderImage, &backendShaderImage); { // WHEN const bool newValue = false; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("enabled"); - change->setValue(newValue); - backendShaderImage.sceneChangeEvent(change); + shaderImage.setEnabled(newValue); + backendShaderImage.syncFromFrontEnd(&shaderImage, false); // THEN QCOMPARE(backendShaderImage.isEnabled(), newValue); } { // WHEN - const Qt3DCore::QNodeId newValue = Qt3DCore::QNodeId::createId(); - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("texture"); - change->setValue(QVariant::fromValue(newValue)); - backendShaderImage.sceneChangeEvent(change); + Qt3DRender::QTexture2D tex2D; + shaderImage.setTexture(&tex2D); + backendShaderImage.syncFromFrontEnd(&shaderImage, false); // THEN - QCOMPARE(backendShaderImage.textureId(), newValue); + QCOMPARE(backendShaderImage.textureId(), tex2D.id()); } { // WHEN const int newValue = 883; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("mipLevel"); - change->setValue(QVariant::fromValue(newValue)); - backendShaderImage.sceneChangeEvent(change); + shaderImage.setMipLevel(newValue); + backendShaderImage.syncFromFrontEnd(&shaderImage, false); // THEN QCOMPARE(backendShaderImage.mipLevel(), newValue); @@ -169,10 +169,8 @@ private Q_SLOTS: { // WHEN const int newValue = 1584; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("layer"); - change->setValue(QVariant::fromValue(newValue)); - backendShaderImage.sceneChangeEvent(change); + shaderImage.setLayer(newValue); + backendShaderImage.syncFromFrontEnd(&shaderImage, false); // THEN QCOMPARE(backendShaderImage.layer(), newValue); @@ -180,10 +178,8 @@ private Q_SLOTS: { // WHEN const bool newValue = true; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("layered"); - change->setValue(QVariant::fromValue(newValue)); - backendShaderImage.sceneChangeEvent(change); + shaderImage.setLayered(newValue); + backendShaderImage.syncFromFrontEnd(&shaderImage, false); // THEN QCOMPARE(backendShaderImage.layered(), newValue); @@ -191,10 +187,8 @@ private Q_SLOTS: { // WHEN const Qt3DRender::QShaderImage::Access newValue = Qt3DRender::QShaderImage::WriteOnly; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("access"); - change->setValue(QVariant::fromValue(newValue)); - backendShaderImage.sceneChangeEvent(change); + shaderImage.setAccess(newValue); + backendShaderImage.syncFromFrontEnd(&shaderImage, false); // THEN QCOMPARE(backendShaderImage.access(), newValue); @@ -202,10 +196,8 @@ private Q_SLOTS: { // WHEN const Qt3DRender::QShaderImage::ImageFormat newValue = Qt3DRender::QShaderImage::RG16F; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("format"); - change->setValue(QVariant::fromValue(newValue)); - backendShaderImage.sceneChangeEvent(change); + shaderImage.setFormat(newValue); + backendShaderImage.syncFromFrontEnd(&shaderImage, false); // THEN QCOMPARE(backendShaderImage.format(), newValue); diff --git a/tests/auto/render/technique/tst_technique.cpp b/tests/auto/render/technique/tst_technique.cpp index 64a66f0c8..2ed39e315 100644 --- a/tests/auto/render/technique/tst_technique.cpp +++ b/tests/auto/render/technique/tst_technique.cpp @@ -308,6 +308,7 @@ private Q_SLOTS: void checkIsCompatibleWithFilters() { // GIVEN + TestRenderer renderer; Qt3DRender::Render::Technique backendTechnique; Qt3DRender::Render::NodeManagers nodeManagers; @@ -339,11 +340,17 @@ private Q_SLOTS: Qt3DRender::Render::FilterKey *backendFilterKey4 = nodeManagers.filterKeyManager()->getOrCreateResource(filterKey4->id()); Qt3DRender::Render::FilterKey *backendFilterKey5 = nodeManagers.filterKeyManager()->getOrCreateResource(filterKey5->id()); - simulateInitialization(filterKey1, backendFilterKey1); - simulateInitialization(filterKey2, backendFilterKey2); - simulateInitialization(filterKey3, backendFilterKey3); - simulateInitialization(filterKey4, backendFilterKey4); - simulateInitialization(filterKey5, backendFilterKey5); + backendFilterKey1->setRenderer(&renderer); + backendFilterKey2->setRenderer(&renderer); + backendFilterKey3->setRenderer(&renderer); + backendFilterKey4->setRenderer(&renderer); + backendFilterKey5->setRenderer(&renderer); + + simulateInitializationSync(filterKey1, backendFilterKey1); + simulateInitializationSync(filterKey2, backendFilterKey2); + simulateInitializationSync(filterKey3, backendFilterKey3); + simulateInitializationSync(filterKey4, backendFilterKey4); + simulateInitializationSync(filterKey5, backendFilterKey5); // THEN QCOMPARE(nodeManagers.filterKeyManager()->activeHandles().size(), 5); diff --git a/tests/auto/render/textures/tst_textures.cpp b/tests/auto/render/textures/tst_textures.cpp index 1cd11b153..725ddc269 100644 --- a/tests/auto/render/textures/tst_textures.cpp +++ b/tests/auto/render/textures/tst_textures.cpp @@ -141,6 +141,11 @@ public: { } + void updateGenerator() + { + Qt3DRender::QAbstractTextureImage::notifyDataGeneratorChanged(); + } + Qt3DRender::QTextureImageDataGeneratorPtr dataGenerator() const { return Qt3DRender::QTextureImageDataGeneratorPtr(new TestImageDataGenerator(m_genId)); @@ -187,17 +192,20 @@ class tst_RenderTextures : public Qt3DCore::QBackendNodeTester Qt3DRender::Render::Texture *createBackendTexture(Qt3DRender::QAbstractTexture *frontend, Qt3DRender::Render::TextureManager *texMgr, - Qt3DRender::Render::TextureImageManager *texImgMgr) + Qt3DRender::Render::TextureImageManager *texImgMgr, + Qt3DRender::Render::AbstractRenderer *renderer) { Qt3DRender::Render::Texture *backend = texMgr->getOrCreateResource(frontend->id()); - simulateInitialization(frontend, backend); + backend->setRenderer(renderer); + simulateInitializationSync(frontend, backend); // create texture images for (const auto texImgFrontend : frontend->textureImages()) { // make sure TextureImageManager has backend node for this QTextureImage if (!texImgMgr->contains(texImgFrontend->id())) { Qt3DRender::Render::TextureImage *texImgBackend = texImgMgr->getOrCreateResource(texImgFrontend->id()); - simulateInitialization(texImgFrontend, texImgBackend); + texImgBackend->setRenderer(renderer); + simulateInitializationSync(texImgFrontend, texImgBackend); } backend->addTextureImage(texImgFrontend->id()); } @@ -221,10 +229,12 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::Texture *bt1a = createBackendTexture(tex1a, mgrs->textureManager(), - mgrs->textureImageManager()); + mgrs->textureImageManager(), + &renderer); Qt3DRender::Render::Texture *bt1b = createBackendTexture(tex1b, mgrs->textureManager(), - mgrs->textureImageManager()); + mgrs->textureImageManager(), + &renderer); renderer.updateTexture(bt1a); renderer.updateTexture(bt1b); @@ -254,7 +264,8 @@ private Q_SLOTS: for (auto *t : textures) { Qt3DRender::Render::Texture *backendTexture = createBackendTexture(t, mgrs->textureManager(), - mgrs->textureImageManager()); + mgrs->textureImageManager(), + &renderer); backend.push_back(backendTexture); renderer.updateTexture(backendTexture); } @@ -303,10 +314,12 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::Texture *bt1 = createBackendTexture(tex1a, mgrs->textureManager(), - mgrs->textureImageManager()); + mgrs->textureImageManager(), + &renderer); Qt3DRender::Render::Texture *bt2 = createBackendTexture(tex1b, mgrs->textureManager(), - mgrs->textureImageManager()); + mgrs->textureImageManager(), + &renderer); // THEN QCOMPARE(bt1->sharedTextureId(), 1); QCOMPARE(bt2->sharedTextureId(), 1); @@ -332,10 +345,12 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::Texture *bt1 = createBackendTexture(tex1a, mgrs->textureManager(), - mgrs->textureImageManager()); + mgrs->textureImageManager(), + &renderer); Qt3DRender::Render::Texture *bt2 = createBackendTexture(tex1b, mgrs->textureManager(), - mgrs->textureImageManager()); + mgrs->textureImageManager(), + &renderer); // THEN QCOMPARE(bt1->sharedTextureId(), 1); QCOMPARE(bt2->sharedTextureId(), 2); @@ -372,7 +387,8 @@ private Q_SLOTS: for (auto *t : textures) { Qt3DRender::Render::Texture *backendTexture = createBackendTexture(t, mgrs->textureManager(), - mgrs->textureImageManager()); + mgrs->textureImageManager(), + &renderer); backend.push_back(backendTexture); renderer.updateTexture(backendTexture); } @@ -416,13 +432,15 @@ private Q_SLOTS: void checkTextureImageCleanupState() { // GIVEN + Qt3DRender::Render::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); TestTextureImage img(1); img.setLayer(2); img.setMipLevel(3); // WHEN Qt3DRender::Render::TextureImage texImgBackend; - simulateInitialization(&img, &texImgBackend); + texImgBackend.setRenderer(&renderer); + simulateInitializationSync(&img, &texImgBackend); texImgBackend.cleanup(); // THEN @@ -431,11 +449,14 @@ private Q_SLOTS: QCOMPARE(texImgBackend.mipLevel(), 0); QCOMPARE(texImgBackend.face(), Qt3DRender::QAbstractTexture::CubeMapPositiveX); QVERIFY(texImgBackend.dataGenerator().isNull()); + + renderer.shutdown(); } void checkTextureImageInitializeFromPeer() { // GIVEN + Qt3DRender::Render::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); TestTextureImage img(1); { @@ -444,7 +465,8 @@ private Q_SLOTS: img.setMipLevel(3); Qt3DRender::Render::TextureImage texImgBackend; - simulateInitialization(&img, &texImgBackend); + texImgBackend.setRenderer(&renderer); + simulateInitializationSync(&img, &texImgBackend); // THEN QCOMPARE(texImgBackend.isEnabled(), true); @@ -461,28 +483,31 @@ private Q_SLOTS: img.setEnabled(false); Qt3DRender::Render::TextureImage texImgBackend; - simulateInitialization(&img, &texImgBackend); + texImgBackend.setRenderer(&renderer); + simulateInitializationSync(&img, &texImgBackend); // THEN QCOMPARE(texImgBackend.isEnabled(), false); QCOMPARE(texImgBackend.peerId(), img.id()); } + + renderer.shutdown(); } void checkTextureImageSceneChangeEvents() { // GIVEN Qt3DRender::Render::TextureImage backendImage; + TestTextureImage textureImage(1); TestRenderer renderer; backendImage.setRenderer(&renderer); + simulateInitializationSync(&textureImage, &backendImage); { // WHEN const bool newValue = false; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("enabled"); - change->setValue(newValue); - backendImage.sceneChangeEvent(change); + textureImage.setEnabled(newValue); + backendImage.syncFromFrontEnd(&textureImage, false); // THEN QCOMPARE(backendImage.isEnabled(), newValue); @@ -495,10 +520,8 @@ private Q_SLOTS: { // WHEN const int newValue = 7; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("layer"); - change->setValue(newValue); - backendImage.sceneChangeEvent(change); + textureImage.setLayer(newValue); + backendImage.syncFromFrontEnd(&textureImage, false); // THEN QCOMPARE(backendImage.layer(), newValue); @@ -511,10 +534,9 @@ private Q_SLOTS: { // WHEN const int newValue = 3; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("mipLevel"); - change->setValue(newValue); - backendImage.sceneChangeEvent(change); + textureImage.setMipLevel(newValue); + backendImage.syncFromFrontEnd(&textureImage, false); + // THEN QCOMPARE(backendImage.mipLevel(), newValue); @@ -527,10 +549,8 @@ private Q_SLOTS: { // WHEN const Qt3DRender::QAbstractTexture::CubeMapFace newValue = Qt3DRender::QAbstractTexture::CubeMapNegativeX; - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("face"); - change->setValue(newValue); - backendImage.sceneChangeEvent(change); + textureImage.setFace(newValue); + backendImage.syncFromFrontEnd(&textureImage, false); // THEN QCOMPARE(backendImage.face(), newValue); @@ -542,45 +562,24 @@ private Q_SLOTS: { // WHEN - Qt3DRender::QTextureImageDataGeneratorPtr generator1(new TestImageDataGenerator(883)); - auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("dataGenerator"); - change->setValue(QVariant::fromValue(generator1)); - backendImage.sceneChangeEvent(change); + textureImage.updateGenerator(); + backendImage.syncFromFrontEnd(&textureImage, false); // THEN - QCOMPARE(backendImage.dataGenerator(), generator1); QVERIFY(backendImage.isDirty()); QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); backendImage.unsetDirty(); // WHEN - Qt3DRender::QTextureImageDataGeneratorPtr generator2(new TestImageDataGenerator(1584)); - change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("dataGenerator"); - change->setValue(QVariant::fromValue(generator2)); - backendImage.sceneChangeEvent(change); + textureImage.updateGenerator(); + backendImage.syncFromFrontEnd(&textureImage, false); // THEN QVERIFY(backendImage.isDirty()); QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); backendImage.unsetDirty(); - - // WHEN - Qt3DRender::QTextureImageDataGeneratorPtr generator3; - change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("dataGenerator"); - change->setValue(QVariant::fromValue(generator3)); - backendImage.sceneChangeEvent(change); - - // THEN - QVERIFY(backendImage.dataGenerator().isNull()); - QVERIFY(backendImage.isDirty()); - QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); - renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); - backendImage.unsetDirty(); } renderer.shutdown(); @@ -598,7 +597,8 @@ private Q_SLOTS: Qt3DRender::QAbstractTexture* frontendTexture = createQTexture(1, {1}, true); Qt3DRender::Render::Texture *backendTexture = texMgr->getOrCreateResource(frontendTexture->id()); - simulateInitialization(frontendTexture, backendTexture); + backendTexture->setRenderer(&renderer); + simulateInitializationSync(frontendTexture, backendTexture); // THEN QCOMPARE(backendTexture->textureImageIds().size(), 1); @@ -613,7 +613,8 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::TextureImage *texImgBackend = texImgMgr->getOrCreateResource(texImgFrontend->id()); - simulateInitialization(texImgFrontend, texImgBackend); + texImgBackend->setRenderer(&renderer); + simulateInitializationSync(texImgFrontend, texImgBackend); // THEN qDebug() << frontendGenerator << texImgBackend->dataGenerator(); @@ -638,7 +639,8 @@ private Q_SLOTS: Qt3DRender::QAbstractTexture* frontendTexture = createQTexture(1, {1}, true); Qt3DRender::Render::Texture *backendTexture = static_cast<Qt3DRender::Render::Texture *>(textureBackendNodeMapper.create(creationChange(frontendTexture))); - simulateInitialization(frontendTexture, backendTexture); + backendTexture->setRenderer(&renderer); + simulateInitializationSync(frontendTexture, backendTexture); // THEN QVERIFY(backendTexture != nullptr); @@ -671,7 +673,8 @@ private Q_SLOTS: Qt3DRender::QAbstractTexture* frontendTexture = createQTexture(1, {1}, true); Qt3DRender::Render::Texture *backendTexture = static_cast<Qt3DRender::Render::Texture *>(textureBackendNodeMapper.create(creationChange(frontendTexture))); - simulateInitialization(frontendTexture, backendTexture); + backendTexture->setRenderer(&renderer); + simulateInitializationSync(frontendTexture, backendTexture); // WHEN textureBackendNodeMapper.destroy(frontendTexture->id()); @@ -683,7 +686,8 @@ private Q_SLOTS: // WHEN backendTexture = static_cast<Qt3DRender::Render::Texture *>(textureBackendNodeMapper.create(creationChange(frontendTexture))); - simulateInitialization(frontendTexture, backendTexture); + backendTexture->setRenderer(&renderer); + simulateInitializationSync(frontendTexture, backendTexture); // THEN QVERIFY(backendTexture != nullptr); @@ -703,10 +707,10 @@ private Q_SLOTS: renderer.setNodeManagers(mgrs.data()); Qt3DRender::QTexture2D *texture1 = new Qt3DRender::QTexture2D(); - Qt3DRender::QAbstractTextureImage *image1 = new EmptyTextureImage(); + TestTextureImage *image1 = new TestTextureImage(1); Qt3DRender::QTexture2D *texture2 = new Qt3DRender::QTexture2D(); - Qt3DRender::QAbstractTextureImage *image2 = new EmptyTextureImage(); + TestTextureImage *image2 = new TestTextureImage(2); Qt3DRender::QTexture2D *texture3 = new Qt3DRender::QTexture2D(); @@ -721,18 +725,17 @@ private Q_SLOTS: Qt3DRender::Render::TextureImage *backendImage1 = texImgMgr->getOrCreateResource(image1->id()); Qt3DRender::Render::TextureImage *backendImage2 = texImgMgr->getOrCreateResource(image2->id()); - simulateInitialization(texture1, backendTexture1); - simulateInitialization(texture2, backendTexture2); - simulateInitialization(texture3, backendTexture3); - simulateInitialization(image1, backendImage1); - simulateInitialization(image2, backendImage2); - backendTexture1->setRenderer(&renderer); backendTexture2->setRenderer(&renderer); backendTexture3->setRenderer(&renderer); backendImage1->setRenderer(&renderer); backendImage2->setRenderer(&renderer); + simulateInitializationSync(texture1, backendTexture1); + simulateInitializationSync(texture2, backendTexture2); + simulateInitializationSync(texture3, backendTexture3); + simulateInitializationSync(image1, backendImage1); + simulateInitializationSync(image2, backendImage2); // THEN QCOMPARE(backendTexture1->textureImageIds().size(), 1); @@ -765,9 +768,8 @@ private Q_SLOTS: // WHEN // Make Image1 dirty - const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId()); - change->setPropertyName("dataGenerator"); - backendImage1->sceneChangeEvent(change); + image1->updateGenerator(); + backendImage1->syncFromFrontEnd(image1, false); // THEN QVERIFY(backendImage1->isDirty()); @@ -788,7 +790,8 @@ private Q_SLOTS: backendTexture3->unsetDirty(); // WHEN - backendImage2->sceneChangeEvent(change); + image2->updateGenerator(); + backendImage2->syncFromFrontEnd(image2, false); // THEN QVERIFY(backendImage2->isDirty()); |