summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp34
-rw-r--r--tests/auto/animation/animationclip/tst_animationclip.cpp22
-rw-r--r--tests/auto/animation/blendedclipanimator/tst_blendedclipanimator.cpp73
-rw-r--r--tests/auto/animation/channelmapper/tst_channelmapper.cpp34
-rw-r--r--tests/auto/animation/channelmapping/tst_channelmapping.cpp82
-rw-r--r--tests/auto/animation/clipanimator/tst_clipanimator.cpp54
-rw-r--r--tests/auto/animation/clipblendnodevisitor/tst_clipblendnodevisitor.cpp18
-rw-r--r--tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp20
-rw-r--r--tests/auto/animation/clock/tst_clock.cpp18
-rw-r--r--tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp35
-rw-r--r--tests/auto/animation/qanimationcliploader/tst_qanimationcliploader.cpp3
-rw-r--r--tests/auto/animation/qcallbackmapping/tst_qcallbackmapping.cpp21
-rw-r--r--tests/auto/animation/qchannelmapping/tst_qchannelmapping.cpp28
-rw-r--r--tests/auto/core/common/qbackendnodetester.cpp1
-rw-r--r--tests/auto/core/common/qbackendnodetester.h16
-rw-r--r--tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp49
-rw-r--r--tests/auto/core/matrix4x4_sse/tst_matrix4x4_sse.cpp49
-rw-r--r--tests/auto/core/nodes/tst_nodes.cpp434
-rw-r--r--tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp78
-rw-r--r--tests/auto/core/qskeleton/tst_qskeleton.cpp3
-rw-r--r--tests/auto/quick3d/3dcore/3dcore.qml3
-rw-r--r--tests/auto/quick3d/3drender/3drender.qml3
-rw-r--r--tests/auto/render/armature/tst_armature.cpp21
-rw-r--r--tests/auto/render/attribute/tst_attribute.cpp76
-rw-r--r--tests/auto/render/blitframebuffer/tst_blitframebuffer.cpp94
-rw-r--r--tests/auto/render/boundingsphere/tst_boundingsphere.cpp57
-rw-r--r--tests/auto/render/buffer/tst_buffer.cpp167
-rw-r--r--tests/auto/render/commons/testaspect.cpp8
-rw-r--r--tests/auto/render/commons/testrenderer.h2
-rw-r--r--tests/auto/render/coordinatereader/tst_coordinatereader.cpp36
-rw-r--r--tests/auto/render/effect/tst_effect.cpp34
-rw-r--r--tests/auto/render/entity/tst_entity.cpp251
-rw-r--r--tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp7
-rw-r--r--tests/auto/render/framegraphnode/framegraphnode.pro1
-rw-r--r--tests/auto/render/framegraphnode/tst_framegraphnode.cpp39
-rw-r--r--tests/auto/render/geometry/tst_geometry.cpp34
-rw-r--r--tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp188
-rw-r--r--tests/auto/render/joint/tst_joint.cpp88
-rw-r--r--tests/auto/render/layerfiltering/tst_layerfiltering.cpp5
-rw-r--r--tests/auto/render/material/tst_material.cpp50
-rw-r--r--tests/auto/render/materialparametergathererjob/tst_materialparametergathererjob.cpp7
-rw-r--r--tests/auto/render/memorybarrier/tst_memorybarrier.cpp19
-rw-r--r--tests/auto/render/parameter/tst_parameter.cpp27
-rw-r--r--tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp24
-rw-r--r--tests/auto/render/proximityfilter/tst_proximityfilter.cpp29
-rw-r--r--tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp4
-rw-r--r--tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp44
-rw-r--r--tests/auto/render/qbuffer/tst_qbuffer.cpp17
-rw-r--r--tests/auto/render/qcamera/tst_qcamera.cpp24
-rw-r--r--tests/auto/render/qeffect/tst_qeffect.cpp40
-rw-r--r--tests/auto/render/qgeometry/tst_qgeometry.cpp19
-rw-r--r--tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp10
-rw-r--r--tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp35
-rw-r--r--tests/auto/render/qmaterial/tst_qmaterial.cpp39
-rw-r--r--tests/auto/render/qmesh/tst_qmesh.cpp36
-rw-r--r--tests/auto/render/qrendercapture/tst_qrendercapture.cpp16
-rw-r--r--tests/auto/render/qrenderpass/tst_qrenderpass.cpp48
-rw-r--r--tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp48
-rw-r--r--tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp26
-rw-r--r--tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp25
-rw-r--r--tests/auto/render/qshaderprogram/tst_qshaderprogram.cpp6
-rw-r--r--tests/auto/render/qtechnique/tst_qtechnique.cpp113
-rw-r--r--tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp49
-rw-r--r--tests/auto/render/qtextureimage/tst_qtextureimage.cpp20
-rw-r--r--tests/auto/render/qtextureloader/tst_qtextureloader.cpp23
-rw-r--r--tests/auto/render/raycastingjob/tst_raycastingjob.cpp24
-rw-r--r--tests/auto/render/rendercapture/tst_rendercapture.cpp21
-rw-r--r--tests/auto/render/renderer/tst_renderer.cpp25
-rw-r--r--tests/auto/render/renderpass/tst_renderpass.cpp89
-rw-r--r--tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp7
-rw-r--r--tests/auto/render/renderviews/tst_renderviews.cpp2
-rw-r--r--tests/auto/render/scene2d/tst_scene2d.cpp12
-rw-r--r--tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp80
-rw-r--r--tests/auto/render/setfence/tst_setfence.cpp12
-rw-r--r--tests/auto/render/skeleton/tst_skeleton.cpp34
-rw-r--r--tests/auto/render/sortpolicy/tst_sortpolicy.cpp17
-rw-r--r--tests/auto/render/technique/tst_technique.cpp62
-rw-r--r--tests/auto/render/texture/tst_texture.cpp134
-rw-r--r--tests/auto/render/transform/tst_transform.cpp37
-rw-r--r--tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp11
-rw-r--r--tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp100
-rw-r--r--tests/auto/render/updatemeshtrianglelistjob/tst_updatemeshtrianglelistjob.cpp19
-rw-r--r--tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp24
-rw-r--r--tests/auto/render/waitfence/tst_waitfence.cpp36
84 files changed, 1803 insertions, 1927 deletions
diff --git a/tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp b/tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp
index 462c02518..d53fd9c2c 100644
--- a/tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp
+++ b/tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp
@@ -143,7 +143,7 @@ private Q_SLOTS:
{
// WHEN
AdditiveClipBlend backendAdditiveBlend;
- simulateInitialization(&additiveBlend, &backendAdditiveBlend);
+ simulateInitializationSync(&additiveBlend, &backendAdditiveBlend);
// THEN
QCOMPARE(backendAdditiveBlend.isEnabled(), true);
@@ -156,7 +156,7 @@ private Q_SLOTS:
// WHEN
AdditiveClipBlend backendAdditiveBlend;
additiveBlend.setEnabled(false);
- simulateInitialization(&additiveBlend, &backendAdditiveBlend);
+ simulateInitializationSync(&additiveBlend, &backendAdditiveBlend);
// THEN
QCOMPARE(backendAdditiveBlend.peerId(), additiveBlend.id());
@@ -167,14 +167,14 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DAnimation::QAdditiveClipBlend additiveBlend;
AdditiveClipBlend backendAdditiveBlend;
+ simulateInitializationSync(&additiveBlend, &backendAdditiveBlend);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendAdditiveBlend.sceneChangeEvent(change);
+ additiveBlend.setEnabled(newValue);
+ backendAdditiveBlend.syncFromFrontEnd(&additiveBlend, false);
// THEN
QCOMPARE(backendAdditiveBlend.isEnabled(), newValue);
@@ -182,32 +182,26 @@ private Q_SLOTS:
{
// WHEN
const float newValue = 0.883f;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("additiveFactor");
- change->setValue(QVariant::fromValue(newValue));
- backendAdditiveBlend.sceneChangeEvent(change);
+ additiveBlend.setAdditiveFactor(newValue);
+ backendAdditiveBlend.syncFromFrontEnd(&additiveBlend, false);
// THEN
QCOMPARE(backendAdditiveBlend.additiveFactor(), newValue);
}
{
// WHEN
- const Qt3DAnimation::QAdditiveClipBlend newValue;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("baseClip");
- change->setValue(QVariant::fromValue(newValue.id()));
- backendAdditiveBlend.sceneChangeEvent(change);
+ Qt3DAnimation::QAdditiveClipBlend newValue;
+ additiveBlend.setBaseClip(&newValue);
+ backendAdditiveBlend.syncFromFrontEnd(&additiveBlend, false);
// THEN
QCOMPARE(backendAdditiveBlend.baseClipId(), newValue.id());
}
{
// WHEN
- const Qt3DAnimation::QAdditiveClipBlend newValue;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("additiveClip");
- change->setValue(QVariant::fromValue(newValue.id()));
- backendAdditiveBlend.sceneChangeEvent(change);
+ Qt3DAnimation::QAdditiveClipBlend newValue;
+ additiveBlend.setAdditiveClip(&newValue);
+ backendAdditiveBlend.syncFromFrontEnd(&additiveBlend, false);
// THEN
QCOMPARE(backendAdditiveBlend.additiveClipId(), newValue.id());
diff --git a/tests/auto/animation/animationclip/tst_animationclip.cpp b/tests/auto/animation/animationclip/tst_animationclip.cpp
index 15ee60581..a98fbe886 100644
--- a/tests/auto/animation/animationclip/tst_animationclip.cpp
+++ b/tests/auto/animation/animationclip/tst_animationclip.cpp
@@ -55,7 +55,7 @@ private Q_SLOTS:
clip.setSource(QUrl::fromLocalFile("walk.qlip"));
// WHEN
- simulateInitialization(&clip, &backendClip);
+ simulateInitializationSync(&clip, &backendClip);
// THEN
QCOMPARE(backendClip.peerId(), clip.id());
@@ -82,7 +82,7 @@ private Q_SLOTS:
clip.setSource(QUrl::fromLocalFile("walk.qlip"));
// WHEN
- simulateInitialization(&clip, &backendClip);
+ simulateInitializationSync(&clip, &backendClip);
backendClip.setSource(QUrl::fromLocalFile("run.qlip"));
backendClip.cleanup();
@@ -96,27 +96,23 @@ private Q_SLOTS:
void checkPropertyChanges()
{
// GIVEN
+ Qt3DAnimation::QAnimationClipLoader clip;
AnimationClip backendClip;
Handler handler;
backendClip.setHandler(&handler);
- backendClip.setDataType(Qt3DAnimation::Animation::AnimationClip::File);
- Qt3DCore::QPropertyUpdatedChangePtr updateChange;
+ simulateInitializationSync(&clip, &backendClip);
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("enabled");
- updateChange->setValue(true);
- backendClip.sceneChangeEvent(updateChange);
+ clip.setEnabled(false);
+ backendClip.syncFromFrontEnd(&clip, false);
// THEN
- QCOMPARE(backendClip.isEnabled(), true);
+ QCOMPARE(backendClip.isEnabled(), false);
// WHEN
const QUrl newSource = QUrl::fromLocalFile("fallover.qlip");
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("source");
- updateChange->setValue(newSource);
- backendClip.sceneChangeEvent(updateChange);
+ clip.setSource(newSource);
+ backendClip.syncFromFrontEnd(&clip, false);
// THEN
QCOMPARE(backendClip.source(), newSource);
diff --git a/tests/auto/animation/blendedclipanimator/tst_blendedclipanimator.cpp b/tests/auto/animation/blendedclipanimator/tst_blendedclipanimator.cpp
index c0e1581f9..bb95fe979 100644
--- a/tests/auto/animation/blendedclipanimator/tst_blendedclipanimator.cpp
+++ b/tests/auto/animation/blendedclipanimator/tst_blendedclipanimator.cpp
@@ -29,6 +29,7 @@
#include <QtTest/QTest>
#include <Qt3DAnimation/private/blendedclipanimator_p.h>
#include <Qt3DAnimation/qanimationcliploader.h>
+#include <Qt3DAnimation/qadditiveclipblend.h>
#include <Qt3DAnimation/qblendedclipanimator.h>
#include <Qt3DCore/private/qnode_p.h>
#include <Qt3DCore/private/qscene_p.h>
@@ -114,7 +115,7 @@ private Q_SLOTS:
Qt3DAnimation::Animation::Handler handler;
backendBlendedClipAnimator.setHandler(&handler);
- simulateInitialization(&blendedClipAnimator, &backendBlendedClipAnimator);
+ simulateInitializationSync(&blendedClipAnimator, &backendBlendedClipAnimator);
// THEN
QCOMPARE(backendBlendedClipAnimator.isEnabled(), true);
@@ -131,7 +132,7 @@ private Q_SLOTS:
backendBlendedClipAnimator.setHandler(&handler);
blendedClipAnimator.setEnabled(false);
- simulateInitialization(&blendedClipAnimator, &backendBlendedClipAnimator);
+ simulateInitializationSync(&blendedClipAnimator, &backendBlendedClipAnimator);
// THEN
QCOMPARE(backendBlendedClipAnimator.peerId(), blendedClipAnimator.id());
@@ -142,61 +143,53 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DAnimation::QBlendedClipAnimator blendedClipAnimator;
Qt3DAnimation::Animation::BlendedClipAnimator backendBlendedClipAnimator;
Qt3DAnimation::Animation::Handler handler;
backendBlendedClipAnimator.setHandler(&handler);
+ simulateInitializationSync(&blendedClipAnimator, &backendBlendedClipAnimator);
{
- // WHEN
- const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendBlendedClipAnimator.sceneChangeEvent(change);
-
- // THEN
+ // WHEN
+ const bool newValue = false;
+ blendedClipAnimator.setEnabled(newValue);
+ backendBlendedClipAnimator.syncFromFrontEnd(&blendedClipAnimator, false);
+
+ // THEN
QCOMPARE(backendBlendedClipAnimator.isEnabled(), newValue);
}
{
- // WHEN
- const Qt3DCore::QNodeId newValue = Qt3DCore::QNodeId::createId();
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("blendTree");
- change->setValue(QVariant::fromValue(newValue));
- backendBlendedClipAnimator.sceneChangeEvent(change);
-
- // THEN
- QCOMPARE(backendBlendedClipAnimator.blendTreeRootId(), newValue);
+ // WHEN
+ auto blendTree = new Qt3DAnimation::QAdditiveClipBlend();
+ blendedClipAnimator.setBlendTree(blendTree);
+ backendBlendedClipAnimator.syncFromFrontEnd(&blendedClipAnimator, false);
+
+ // THEN
+ QCOMPARE(backendBlendedClipAnimator.blendTreeRootId(), blendTree->id());
}
{
- // WHEN
- const Qt3DCore::QNodeId newValue = Qt3DCore::QNodeId::createId();
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("channelMapper");
- change->setValue(QVariant::fromValue(newValue));
- backendBlendedClipAnimator.sceneChangeEvent(change);
-
- // THEN
- QCOMPARE(backendBlendedClipAnimator.mapperId(), newValue);
+ // WHEN
+ auto channelMapper = new Qt3DAnimation::QChannelMapper();
+ blendedClipAnimator.setChannelMapper(channelMapper);
+ backendBlendedClipAnimator.syncFromFrontEnd(&blendedClipAnimator, false);
+
+ // THEN
+ QCOMPARE(backendBlendedClipAnimator.mapperId(), channelMapper->id());
}
{
- // WHEN
- const bool newValue = true;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("running");
- change->setValue(QVariant::fromValue(newValue));
- backendBlendedClipAnimator.sceneChangeEvent(change);
-
- // THEN
+ // WHEN
+ const bool newValue = true;
+ blendedClipAnimator.setRunning(newValue);
+ backendBlendedClipAnimator.syncFromFrontEnd(&blendedClipAnimator, false);
+
+ // THEN
QCOMPARE(backendBlendedClipAnimator.isRunning(), newValue);
}
{
// WHEN
const int newValue = 883;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("loops");
- change->setValue(QVariant::fromValue(newValue));
- backendBlendedClipAnimator.sceneChangeEvent(change);
+ blendedClipAnimator.setLoopCount(newValue);
+ backendBlendedClipAnimator.syncFromFrontEnd(&blendedClipAnimator, false);
// THEN
QCOMPARE(backendBlendedClipAnimator.loops(), newValue);
diff --git a/tests/auto/animation/channelmapper/tst_channelmapper.cpp b/tests/auto/animation/channelmapper/tst_channelmapper.cpp
index 446e1a0c5..2dfa07a43 100644
--- a/tests/auto/animation/channelmapper/tst_channelmapper.cpp
+++ b/tests/auto/animation/channelmapper/tst_channelmapper.cpp
@@ -60,7 +60,7 @@ private Q_SLOTS:
mapper.addMapping(new Qt3DAnimation::QChannelMapping);
// WHEN
- simulateInitialization(&mapper, &backendMapper);
+ simulateInitializationSync(&mapper, &backendMapper);
// THEN
QCOMPARE(backendMapper.peerId(), mapper.id());
@@ -90,7 +90,7 @@ private Q_SLOTS:
mapper.addMapping(new Qt3DAnimation::QChannelMapping());
// WHEN
- simulateInitialization(&mapper, &backendMapper);
+ simulateInitializationSync(&mapper, &backendMapper);
backendMapper.cleanup();
// THEN
@@ -101,19 +101,18 @@ private Q_SLOTS:
void checkPropertyChanges()
{
// GIVEN
+ Qt3DAnimation::QChannelMapper mapper;
Qt3DAnimation::Animation::Handler handler;
Qt3DAnimation::Animation::ChannelMapper backendMapper;
backendMapper.setHandler(&handler);
- Qt3DCore::QPropertyUpdatedChangePtr updateChange;
+ simulateInitializationSync(&mapper, &backendMapper);
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("enabled");
- updateChange->setValue(true);
- backendMapper.sceneChangeEvent(updateChange);
+ mapper.setEnabled(false);
+ backendMapper.syncFromFrontEnd(&mapper, false);
// THEN
- QCOMPARE(backendMapper.isEnabled(), true);
+ QCOMPARE(backendMapper.isEnabled(), false);
// WHEN
Qt3DAnimation::QChannelMapping mapping;
@@ -121,11 +120,10 @@ private Q_SLOTS:
Qt3DAnimation::Animation::ChannelMapping *backendMapping
= handler.channelMappingManager()->getOrCreateResource(mappingId);
backendMapping->setHandler(&handler);
- simulateInitialization(&mapping, backendMapping);
+ simulateInitializationSync(&mapping, backendMapping);
- auto nodeAddedChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &mapping);
- nodeAddedChange->setPropertyName("mappings");
- backendMapper.sceneChangeEvent(nodeAddedChange);
+ mapper.addMapping(&mapping);
+ backendMapper.syncFromFrontEnd(&mapper, false);
// THEN
QCOMPARE(backendMapper.mappingIds().size(), 1);
@@ -139,11 +137,10 @@ private Q_SLOTS:
Qt3DAnimation::Animation::ChannelMapping *backendMapping2
= handler.channelMappingManager()->getOrCreateResource(mappingId2);
backendMapping2->setHandler(&handler);
- simulateInitialization(&mapping2, backendMapping2);
+ simulateInitializationSync(&mapping2, backendMapping2);
- nodeAddedChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &mapping2);
- nodeAddedChange->setPropertyName("mappings");
- backendMapper.sceneChangeEvent(nodeAddedChange);
+ mapper.addMapping(&mapping2);
+ backendMapper.syncFromFrontEnd(&mapper, false);
// THEN
QCOMPARE(backendMapper.mappingIds().size(), 2);
@@ -154,9 +151,8 @@ private Q_SLOTS:
QCOMPARE(backendMapper.mappings().last(), backendMapping2);
// WHEN
- const auto nodeRemovedChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &mapping);
- nodeRemovedChange->setPropertyName("mappings");
- backendMapper.sceneChangeEvent(nodeRemovedChange);
+ mapper.removeMapping(&mapping);
+ backendMapper.syncFromFrontEnd(&mapper, false);
// THEN
QCOMPARE(backendMapper.mappingIds().size(), 1);
diff --git a/tests/auto/animation/channelmapping/tst_channelmapping.cpp b/tests/auto/animation/channelmapping/tst_channelmapping.cpp
index 35ffcb10a..e108e3d26 100644
--- a/tests/auto/animation/channelmapping/tst_channelmapping.cpp
+++ b/tests/auto/animation/channelmapping/tst_channelmapping.cpp
@@ -34,6 +34,7 @@
#include <Qt3DAnimation/qskeletonmapping.h>
#include <Qt3DAnimation/private/qchannelmapping_p.h>
#include <Qt3DCore/qentity.h>
+#include <Qt3DCore/qtransform.h>
#include <Qt3DCore/qskeleton.h>
#include <Qt3DCore/private/qnode_p.h>
#include <Qt3DCore/private/qscene_p.h>
@@ -72,7 +73,7 @@ private Q_SLOTS:
mapping.setProperty(QLatin1String("foo"));
// WHEN
- simulateInitialization(&mapping, &backendMapping);
+ simulateInitializationSync(&mapping, &backendMapping);
// THEN
QCOMPARE(backendMapping.peerId(), mapping.id());
@@ -93,7 +94,7 @@ private Q_SLOTS:
skeletonMapping.setSkeleton(skeleton);
// WHEN
- simulateInitialization(&skeletonMapping, &backendSkeletonMapping);
+ simulateInitializationSync(&skeletonMapping, &backendSkeletonMapping);
// THEN
QCOMPARE(backendSkeletonMapping.peerId(), skeletonMapping.id());
@@ -128,7 +129,7 @@ private Q_SLOTS:
mapping.setProperty(QLatin1String("foo"));
// WHEN
- simulateInitialization(&mapping, &backendMapping);
+ simulateInitializationSync(&mapping, &backendMapping);
backendMapping.setSkeletonId(Qt3DCore::QNodeId::createId());
backendMapping.cleanup();
@@ -146,77 +147,50 @@ private Q_SLOTS:
void checkPropertyChanges()
{
// GIVEN
+ Qt3DAnimation::QChannelMapping mapping;
Qt3DAnimation::Animation::Handler handler;
Qt3DAnimation::Animation::ChannelMapping backendMapping;
backendMapping.setHandler(&handler);
- Qt3DCore::QPropertyUpdatedChangePtr updateChange;
+ simulateInitializationSync(&mapping, &backendMapping);
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("enabled");
- updateChange->setValue(true);
- backendMapping.sceneChangeEvent(updateChange);
+ mapping.setEnabled(false);
+ backendMapping.syncFromFrontEnd(&mapping, false);
// THEN
- QCOMPARE(backendMapping.isEnabled(), true);
+ QCOMPARE(backendMapping.isEnabled(), false);
// WHEN
- const QString channelName(QLatin1String("Rotation"));
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("channelName");
- updateChange->setValue(channelName);
- backendMapping.sceneChangeEvent(updateChange);
+ const QString channelName(QLatin1String("Translation"));
+ mapping.setChannelName(channelName);
+ backendMapping.syncFromFrontEnd(&mapping, false);
// THEN
QCOMPARE(backendMapping.channelName(), channelName);
// WHEN
- const auto id = Qt3DCore::QNodeId::createId();
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("target");
- updateChange->setValue(QVariant::fromValue(id));
- backendMapping.sceneChangeEvent(updateChange);
-
- // THEN
- QCOMPARE(backendMapping.targetId(), id);
-
- // WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("type");
- updateChange->setValue(QVariant(static_cast<int>(QVariant::Vector3D)));
- backendMapping.sceneChangeEvent(updateChange);
+ const auto target = new Qt3DCore::QTransform();
+ mapping.setTarget(target);
+ mapping.setProperty("translation");
+ backendMapping.syncFromFrontEnd(&mapping, false);
// THEN
+ QCOMPARE(backendMapping.targetId(), target->id());
QCOMPARE(backendMapping.type(), static_cast<int>(QVariant::Vector3D));
+ QCOMPARE(backendMapping.componentCount(), 3);
- // WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("componentCount");
- updateChange->setValue(4);
- backendMapping.sceneChangeEvent(updateChange);
-
- // THEN
- QCOMPARE(backendMapping.componentCount(), 4);
-
- // WHEN
- const char *testName = "883";
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("propertyName");
- updateChange->setValue(QVariant::fromValue(reinterpret_cast<void *>(const_cast<char *>(testName))));
- backendMapping.sceneChangeEvent(updateChange);
-
- // THEN
- QCOMPARE(backendMapping.propertyName(), testName);
+ const char *testName = "translation";
+ QCOMPARE(qstrcmp(testName, backendMapping.propertyName()), 0);
- // WHEN
- const auto skeletonId = Qt3DCore::QNodeId::createId();
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("skeleton");
- updateChange->setValue(QVariant::fromValue(skeletonId));
- backendMapping.sceneChangeEvent(updateChange);
+// // WHEN
+// const auto skeletonId = Qt3DCore::QNodeId::createId();
+// updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
+// updateChange->setPropertyName("skeleton");
+// updateChange->setValue(QVariant::fromValue(skeletonId));
+// backendMapping.sceneChangeEvent(updateChange);
- // THEN
- QCOMPARE(backendMapping.skeletonId(), skeletonId);
+// // THEN
+// QCOMPARE(backendMapping.skeletonId(), skeletonId);
}
};
diff --git a/tests/auto/animation/clipanimator/tst_clipanimator.cpp b/tests/auto/animation/clipanimator/tst_clipanimator.cpp
index 0272bcfaa..5f297306a 100644
--- a/tests/auto/animation/clipanimator/tst_clipanimator.cpp
+++ b/tests/auto/animation/clipanimator/tst_clipanimator.cpp
@@ -29,6 +29,7 @@
#include <QtTest/QTest>
#include <Qt3DAnimation/private/clipanimator_p.h>
#include <Qt3DAnimation/qanimationcliploader.h>
+#include <Qt3DAnimation/qchannelmapper.h>
#include <Qt3DAnimation/qclipanimator.h>
#include <Qt3DAnimation/qclock.h>
#include <Qt3DCore/private/qnode_p.h>
@@ -59,7 +60,7 @@ private Q_SLOTS:
animator.setNormalizedTime(0.5f);
// WHEN
- simulateInitialization(&animator, &backendAnimator);
+ simulateInitializationSync(&animator, &backendAnimator);
// THEN
QCOMPARE(backendAnimator.peerId(), animator.id());
@@ -98,7 +99,7 @@ private Q_SLOTS:
animator.setNormalizedTime(1.0f);
// WHEN
- simulateInitialization(&animator, &backendAnimator);
+ simulateInitializationSync(&animator, &backendAnimator);
backendAnimator.setClipId(Qt3DCore::QNodeId::createId());
backendAnimator.setClockId(Qt3DCore::QNodeId::createId());
backendAnimator.cleanup();
@@ -115,63 +116,60 @@ private Q_SLOTS:
void checkPropertyChanges()
{
// GIVEN
+ Qt3DAnimation::QClipAnimator animator;
Qt3DAnimation::Animation::Handler handler;
Qt3DAnimation::Animation::ClipAnimator backendAnimator;
backendAnimator.setHandler(&handler);
- Qt3DCore::QPropertyUpdatedChangePtr updateChange;
+ simulateInitializationSync(&animator, &backendAnimator);
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("enabled");
- updateChange->setValue(true);
- backendAnimator.sceneChangeEvent(updateChange);
+ animator.setEnabled(false);
+ backendAnimator.syncFromFrontEnd(&animator, false);
// THEN
- QCOMPARE(backendAnimator.isEnabled(), true);
+ QCOMPARE(backendAnimator.isEnabled(), false);
// WHEN
auto newClip = new Qt3DAnimation::QAnimationClipLoader();
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("clip");
- updateChange->setValue(QVariant::fromValue(newClip->id()));
- backendAnimator.sceneChangeEvent(updateChange);
+ animator.setClip(newClip);
+ backendAnimator.syncFromFrontEnd(&animator, false);
// THEN
QCOMPARE(backendAnimator.clipId(), newClip->id());
// WHEN
+ auto newMapper = new Qt3DAnimation::QChannelMapper();
+ animator.setChannelMapper(newMapper);
+ backendAnimator.syncFromFrontEnd(&animator, false);
+
+ // THEN
+ QCOMPARE(backendAnimator.mapperId(), newMapper->id());
+
+ // WHEN
auto clock = new Qt3DAnimation::QClock();
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("clock");
- updateChange->setValue(QVariant::fromValue(clock->id()));
- backendAnimator.sceneChangeEvent(updateChange);
+ animator.setClock(clock);
+ backendAnimator.syncFromFrontEnd(&animator, false);
// THEN
QCOMPARE(backendAnimator.clockId(), clock->id());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("running");
- updateChange->setValue(true);
- backendAnimator.sceneChangeEvent(updateChange);
+ animator.setRunning(true);
+ backendAnimator.syncFromFrontEnd(&animator, false);
// THEN
QCOMPARE(backendAnimator.isRunning(), true);
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("loops");
- updateChange->setValue(64);
- backendAnimator.sceneChangeEvent(updateChange);
+ animator.setLoopCount(64);
+ backendAnimator.syncFromFrontEnd(&animator, false);
// THEN
QCOMPARE(backendAnimator.loops(), 64);
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("normalizedTime");
- updateChange->setValue(0.5f);
- backendAnimator.sceneChangeEvent(updateChange);
+ animator.setNormalizedTime(0.5f);
+ backendAnimator.syncFromFrontEnd(&animator, false);
// THEN
QVERIFY(qFuzzyCompare(backendAnimator.normalizedLocalTime(), 0.5f));
diff --git a/tests/auto/animation/clipblendnodevisitor/tst_clipblendnodevisitor.cpp b/tests/auto/animation/clipblendnodevisitor/tst_clipblendnodevisitor.cpp
index 3f705e713..54de87b1e 100644
--- a/tests/auto/animation/clipblendnodevisitor/tst_clipblendnodevisitor.cpp
+++ b/tests/auto/animation/clipblendnodevisitor/tst_clipblendnodevisitor.cpp
@@ -73,11 +73,11 @@ private Q_SLOTS:
manager.appendNode(childBlendNode12.id(), backendChildBlendNode12);
// WHEN
- simulateInitialization(&rootBlendNode, backendRootBlendNode);
- simulateInitialization(&childBlendNode1, backendChildBlendNode1);
- simulateInitialization(&childBlendNode2, backendChildBlendNode2);
- simulateInitialization(&childBlendNode11, backendChildBlendNode11);
- simulateInitialization(&childBlendNode12, backendChildBlendNode12);
+ simulateInitializationSync(&rootBlendNode, backendRootBlendNode);
+ simulateInitializationSync(&childBlendNode1, backendChildBlendNode1);
+ simulateInitializationSync(&childBlendNode2, backendChildBlendNode2);
+ simulateInitializationSync(&childBlendNode11, backendChildBlendNode11);
+ simulateInitializationSync(&childBlendNode12, backendChildBlendNode12);
// THEN
QCOMPARE(backendRootBlendNode->allDependencyIds().size(), 2);
@@ -121,7 +121,7 @@ private Q_SLOTS:
// We purposely forgot the to do: manager.appendNode(rootBlendNode.id(), backendRootBlendNode);
// WHEN
- simulateInitialization(&rootBlendNode, backendRootBlendNode);
+ simulateInitializationSync(&rootBlendNode, backendRootBlendNode);
// THEN
QCOMPARE(backendRootBlendNode->allDependencyIds().size(), 2);
@@ -159,9 +159,9 @@ private Q_SLOTS:
// WHEN
- simulateInitialization(&rootBlendNode, backendRootBlendNode);
- simulateInitialization(&childBlendNode1, backendChildBlendNode1);
- simulateInitialization(&childBlendNode2, backendChildBlendNode2);
+ simulateInitializationSync(&rootBlendNode, backendRootBlendNode);
+ simulateInitializationSync(&childBlendNode1, backendChildBlendNode1);
+ simulateInitializationSync(&childBlendNode2, backendChildBlendNode2);
// THEN
QCOMPARE(backendRootBlendNode->allDependencyIds().size(), 2);
diff --git a/tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp b/tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp
index 197378094..47f309b10 100644
--- a/tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp
+++ b/tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp
@@ -80,7 +80,7 @@ private Q_SLOTS:
{
// WHEN
ClipBlendValue backendClipBlendValue;
- simulateInitialization(&clipBlendValue, &backendClipBlendValue);
+ simulateInitializationSync(&clipBlendValue, &backendClipBlendValue);
// THEN
QCOMPARE(backendClipBlendValue.isEnabled(), true);
@@ -91,7 +91,7 @@ private Q_SLOTS:
// WHEN
ClipBlendValue backendClipBlendValue;
clipBlendValue.setEnabled(false);
- simulateInitialization(&clipBlendValue, &backendClipBlendValue);
+ simulateInitializationSync(&clipBlendValue, &backendClipBlendValue);
// THEN
QCOMPARE(backendClipBlendValue.peerId(), clipBlendValue.id());
@@ -102,25 +102,23 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DAnimation::QClipBlendValue clipBlendValue;
ClipBlendValue backendClipBlendValue;
+ simulateInitializationSync(&clipBlendValue, &backendClipBlendValue);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendClipBlendValue.sceneChangeEvent(change);
+ clipBlendValue.setEnabled(newValue);
+ backendClipBlendValue.syncFromFrontEnd(&clipBlendValue, false);
// THEN
QCOMPARE(backendClipBlendValue.isEnabled(), newValue);
}
{
// WHEN
- const Qt3DAnimation::QAnimationClipLoader newValue;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("clip");
- change->setValue(QVariant::fromValue(newValue.id()));
- backendClipBlendValue.sceneChangeEvent(change);
+ Qt3DAnimation::QAnimationClipLoader newValue;
+ clipBlendValue.setClip(&newValue);
+ backendClipBlendValue.syncFromFrontEnd(&clipBlendValue, false);
// THEN
QCOMPARE(backendClipBlendValue.clipId(), newValue.id());
diff --git a/tests/auto/animation/clock/tst_clock.cpp b/tests/auto/animation/clock/tst_clock.cpp
index a81adfe7b..793a01b25 100644
--- a/tests/auto/animation/clock/tst_clock.cpp
+++ b/tests/auto/animation/clock/tst_clock.cpp
@@ -50,7 +50,7 @@ private Q_SLOTS:
clock.setPlaybackRate(10.5);
// WHEN
- simulateInitialization(&clock, &backendClock);
+ simulateInitializationSync(&clock, &backendClock);
// THEN
QCOMPARE(backendClock.playbackRate(), clock.playbackRate());
@@ -69,7 +69,7 @@ private Q_SLOTS:
clock.setPlaybackRate(10.5);
// WHEN
- simulateInitialization(&clock, &backendClock);
+ simulateInitializationSync(&clock, &backendClock);
backendClock.cleanup();
// THEN
@@ -79,15 +79,15 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DAnimation::QClock clock;
Qt3DAnimation::Animation::Clock backendClock;
+ simulateInitializationSync(&clock, &backendClock);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendClock.sceneChangeEvent(change);
+ clock.setEnabled(newValue);
+ backendClock.syncFromFrontEnd(&clock, false);
// THEN
QCOMPARE(backendClock.isEnabled(), newValue);
@@ -95,10 +95,8 @@ private Q_SLOTS:
{
// WHEN
const double newPlaybackRateValue = 2.0;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("playbackRate");
- change->setValue(newPlaybackRateValue);
- backendClock.sceneChangeEvent(change);
+ clock.setPlaybackRate(newPlaybackRateValue);
+ backendClock.syncFromFrontEnd(&clock, false);
// THEN
QCOMPARE(backendClock.playbackRate(), newPlaybackRateValue);
diff --git a/tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp b/tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp
index e75c4f2f8..732a87770 100644
--- a/tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp
+++ b/tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp
@@ -137,7 +137,7 @@ private Q_SLOTS:
{
// WHEN
LerpClipBlend backendLerpBlend;
- simulateInitialization(&lerpBlend, &backendLerpBlend);
+ simulateInitializationSync(&lerpBlend, &backendLerpBlend);
// THEN
QCOMPARE(backendLerpBlend.isEnabled(), true);
@@ -148,7 +148,7 @@ private Q_SLOTS:
// WHEN
LerpClipBlend backendLerpBlend;
lerpBlend.setEnabled(false);
- simulateInitialization(&lerpBlend, &backendLerpBlend);
+ simulateInitializationSync(&lerpBlend, &backendLerpBlend);
// THEN
QCOMPARE(backendLerpBlend.peerId(), lerpBlend.id());
@@ -159,27 +159,26 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DAnimation::QLerpClipBlend lerpBlend;
LerpClipBlend backendLerpBlend;
+ simulateInitializationSync(&lerpBlend, &backendLerpBlend);
+
{
- // WHEN
- const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendLerpBlend.sceneChangeEvent(change);
-
- // THEN
+ // WHEN
+ const bool newValue = false;
+ lerpBlend.setEnabled(newValue);
+ backendLerpBlend.syncFromFrontEnd(&lerpBlend, false);
+
+ // THEN
QCOMPARE(backendLerpBlend.isEnabled(), newValue);
}
{
- // WHEN
- const float newValue = 0.883f;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("blendFactor");
- change->setValue(QVariant::fromValue(newValue));
- backendLerpBlend.sceneChangeEvent(change);
-
- // THEN
+ // WHEN
+ const float newValue = 0.883f;
+ lerpBlend.setBlendFactor(newValue);
+ backendLerpBlend.syncFromFrontEnd(&lerpBlend, false);
+
+ // THEN
QCOMPARE(backendLerpBlend.blendFactor(), newValue);
}
}
diff --git a/tests/auto/animation/qanimationcliploader/tst_qanimationcliploader.cpp b/tests/auto/animation/qanimationcliploader/tst_qanimationcliploader.cpp
index f446f1b0f..c52986055 100644
--- a/tests/auto/animation/qanimationcliploader/tst_qanimationcliploader.cpp
+++ b/tests/auto/animation/qanimationcliploader/tst_qanimationcliploader.cpp
@@ -190,6 +190,9 @@ private Q_SLOTS:
QCOMPARE(spy.count(), 0);
QCOMPARE(arbiter.events.size(), 0);
QCOMPARE(status(), newStatus);
+
+ // Cleanup
+ Qt3DCore::QNodePrivate::get(this)->setArbiter(nullptr);
}
};
diff --git a/tests/auto/animation/qcallbackmapping/tst_qcallbackmapping.cpp b/tests/auto/animation/qcallbackmapping/tst_qcallbackmapping.cpp
index d217f3b0f..591ff54ce 100644
--- a/tests/auto/animation/qcallbackmapping/tst_qcallbackmapping.cpp
+++ b/tests/auto/animation/qcallbackmapping/tst_qcallbackmapping.cpp
@@ -185,23 +185,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 3);
- auto change = arbiter.events.at(0).staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "type");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- QCOMPARE(change->value().toInt(), int(QVariant::Vector3D));
-
- change = arbiter.events.at(1).staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "callback");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- QCOMPARE(reinterpret_cast<DummyCallback *>(change->value().value<void *>()), callback);
-
- change = arbiter.events.at(2).staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "callbackFlags");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- QCOMPARE(change->value().toInt(), static_cast<int>(Qt3DAnimation::QAnimationCallback::OnThreadPool));
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &mapping);
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
mapping.setCallback(QVariant::Vector3D, callback, Qt3DAnimation::QAnimationCallback::OnThreadPool);
@@ -209,6 +197,7 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
}
}
};
diff --git a/tests/auto/animation/qchannelmapping/tst_qchannelmapping.cpp b/tests/auto/animation/qchannelmapping/tst_qchannelmapping.cpp
index 37bd3e241..a47061077 100644
--- a/tests/auto/animation/qchannelmapping/tst_qchannelmapping.cpp
+++ b/tests/auto/animation/qchannelmapping/tst_qchannelmapping.cpp
@@ -284,24 +284,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 3);
-
- auto change = arbiter.events.takeFirst().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "type");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- QCOMPARE(change->value().toInt(), static_cast<int>(QVariant::Vector3D));
-
- change = arbiter.events.takeFirst().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "componentCount");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- QCOMPARE(change->value().toInt(), 3);
-
- change = arbiter.events.takeFirst().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "propertyName");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- QVERIFY(qstrcmp(reinterpret_cast<const char *>(change->value().value<void *>()), "scale") == 0);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &mapping);
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
mapping.setProperty(QStringLiteral("scale"));
@@ -309,6 +296,7 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
}
}
@@ -340,8 +328,8 @@ private Q_SLOTS:
QFETCH(int, expectedType);
QFETCH(int, expectedComponentCount);
- Q_UNUSED(expectedType);
- Q_UNUSED(expectedComponentCount);
+ Q_UNUSED(expectedType)
+ Q_UNUSED(expectedComponentCount)
TestArbiter arbiter;
Qt3DAnimation::QChannelMapping mapping;
@@ -363,7 +351,7 @@ private Q_SLOTS:
mapping.setProperty(QString::fromLatin1(propertyName));
// THEN
- QCOMPARE(arbiter.dirtyNodes.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
}
}
diff --git a/tests/auto/core/common/qbackendnodetester.cpp b/tests/auto/core/common/qbackendnodetester.cpp
index 5d4a10b81..a2685f556 100644
--- a/tests/auto/core/common/qbackendnodetester.cpp
+++ b/tests/auto/core/common/qbackendnodetester.cpp
@@ -36,7 +36,6 @@
#include "qbackendnodetester.h"
#include <Qt3DCore/qbackendnode.h>
-#include <Qt3DCore/qnode.h>
QT_BEGIN_NAMESPACE
diff --git a/tests/auto/core/common/qbackendnodetester.h b/tests/auto/core/common/qbackendnodetester.h
index a9738dff0..a0b89e503 100644
--- a/tests/auto/core/common/qbackendnodetester.h
+++ b/tests/auto/core/common/qbackendnodetester.h
@@ -41,13 +41,13 @@
#include <Qt3DCore/qnodeid.h>
#include <Qt3DCore/qscenechange.h>
#include <Qt3DCore/qnodecreatedchange.h>
+#include <Qt3DCore/qnode.h>
QT_BEGIN_NAMESPACE
namespace Qt3DCore {
class QBackendNode;
-class QNode;
class QBackendNodeTester : public QObject
{
@@ -57,9 +57,21 @@ public:
// Proxies to allow test classes to call private methods on QBackendNode
void setPeerId(QBackendNode *backend, QNodeId id);
- void simulateInitialization(QNode *frontend, QBackendNode *backend);
void sceneChangeEvent(QBackendNode *backend, const Qt3DCore::QSceneChangePtr &e);
Qt3DCore::QNodeCreatedChangeBasePtr creationChange(QNode *frontend) const;
+
+ template<class Backend>
+ void simulateInitializationSync(QNode *frontend, Backend *backend)
+ {
+ Q_ASSERT(frontend);
+ Q_ASSERT(backend);
+
+ backend->setPeerId(frontend->id());
+ backend->setEnabled(frontend->isEnabled());
+ backend->syncFromFrontEnd(frontend, true);
+ }
+
+ void simulateInitialization(QNode *frontend, QBackendNode *backend);
};
} // namespace Qt3DCore
diff --git a/tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp b/tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp
index 144df6711..12eaab263 100644
--- a/tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp
+++ b/tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp
@@ -474,6 +474,55 @@ private Q_SLOTS:
QCOMPARE(row.w(), 44.0f);
}
}
+
+ void checkVectorMapVector()
+ {
+ {
+ // GIVEN
+ QMatrix4x4 tmpMat;
+ QVector3D tmpVec3(1.0f, 0.0f, 0.0f);
+ tmpMat.rotate(90.f, 0.f, 1.f, 0.f);
+
+ Matrix4x4_AVX2 mat(tmpMat);
+ Vector3D vec3(tmpVec3);
+
+ // WHEN
+ const Vector3D resultingVec = mat.mapVector(vec3);
+
+ // THEN
+ QCOMPARE(resultingVec.toQVector3D(), tmpMat.mapVector(tmpVec3));
+ }
+ {
+ // GIVEN
+ QMatrix4x4 tmpMat;
+ QVector3D tmpVec3(0.0f, 0.0f, -1.0f);
+ tmpMat.rotate(90.f, 0.f, 1.f, 0.f);
+
+ Matrix4x4_AVX2 mat(tmpMat);
+ Vector3D vec3(tmpVec3);
+
+ // WHEN
+ const Vector3D resultingVec = mat.mapVector(vec3);
+
+ // THEN
+ QCOMPARE(resultingVec.toQVector3D(), tmpMat.mapVector(tmpVec3));
+ }
+ {
+ // GIVEN
+ QMatrix4x4 tmpMat;
+ QVector3D tmpVec3(3.0f, -3.0f, -1.0f);
+ tmpMat.rotate(90.f, 0.33f, 0.33f, 0.33f);
+
+ Matrix4x4_AVX2 mat(tmpMat);
+ Vector3D vec3(tmpVec3);
+
+ // WHEN
+ const Vector3D resultingVec = mat.mapVector(vec3);
+
+ // THEN
+ QCOMPARE(resultingVec.toQVector3D(), tmpMat.mapVector(tmpVec3));
+ }
+ }
};
QTEST_MAIN(tst_Matrix4x4_AVX2)
diff --git a/tests/auto/core/matrix4x4_sse/tst_matrix4x4_sse.cpp b/tests/auto/core/matrix4x4_sse/tst_matrix4x4_sse.cpp
index bbd6596d4..dccf90d10 100644
--- a/tests/auto/core/matrix4x4_sse/tst_matrix4x4_sse.cpp
+++ b/tests/auto/core/matrix4x4_sse/tst_matrix4x4_sse.cpp
@@ -471,6 +471,55 @@ private Q_SLOTS:
QCOMPARE(row.w(), 44.0f);
}
}
+
+ void checkVectorMapVector()
+ {
+ {
+ // GIVEN
+ QMatrix4x4 tmpMat;
+ QVector3D tmpVec3(1.0f, 0.0f, 0.0f);
+ tmpMat.rotate(90.f, 0.f, 1.f, 0.f);
+
+ Matrix4x4_SSE mat(tmpMat);
+ Vector3D vec3(tmpVec3);
+
+ // WHEN
+ const Vector3D resultingVec = mat.mapVector(vec3);
+
+ // THEN
+ QCOMPARE(resultingVec.toQVector3D(), tmpMat.mapVector(tmpVec3));
+ }
+ {
+ // GIVEN
+ QMatrix4x4 tmpMat;
+ QVector3D tmpVec3(0.0f, 0.0f, -1.0f);
+ tmpMat.rotate(90.f, 0.f, 1.f, 0.f);
+
+ Matrix4x4_SSE mat(tmpMat);
+ Vector3D vec3(tmpVec3);
+
+ // WHEN
+ const Vector3D resultingVec = mat.mapVector(vec3);
+
+ // THEN
+ QCOMPARE(resultingVec.toQVector3D(), tmpMat.mapVector(tmpVec3));
+ }
+ {
+ // GIVEN
+ QMatrix4x4 tmpMat;
+ QVector3D tmpVec3(3.0f, -3.0f, -1.0f);
+ tmpMat.rotate(90.f, 0.33f, 0.33f, 0.33f);
+
+ Matrix4x4_SSE mat(tmpMat);
+ Vector3D vec3(tmpVec3);
+
+ // WHEN
+ const Vector3D resultingVec = mat.mapVector(vec3);
+
+ // THEN
+ QCOMPARE(resultingVec.toQVector3D(), tmpMat.mapVector(tmpVec3));
+ }
+ }
};
QTEST_MAIN(tst_Matrix4x4_SSE)
diff --git a/tests/auto/core/nodes/tst_nodes.cpp b/tests/auto/core/nodes/tst_nodes.cpp
index ec07c158d..c5369ab3e 100644
--- a/tests/auto/core/nodes/tst_nodes.cpp
+++ b/tests/auto/core/nodes/tst_nodes.cpp
@@ -31,6 +31,7 @@
#include <Qt3DCore/qentity.h>
#include <Qt3DCore/qcomponent.h>
#include <Qt3DCore/qaspectengine.h>
+#include <Qt3DCore/qabstractaspect.h>
#include <Qt3DCore/private/qscene_p.h>
#include <Qt3DCore/qpropertyupdatedchange.h>
#include <Qt3DCore/qcomponentaddedchange.h>
@@ -40,6 +41,7 @@
#include <Qt3DCore/qpropertynoderemovedchange.h>
#include <Qt3DCore/private/qnodecreatedchangegenerator_p.h>
#include <Qt3DCore/private/qaspectengine_p.h>
+#include <private/qabstractaspect_p.h>
#include <private/qpostman_p.h>
#include <Qt3DCore/private/qlockableobserverinterface_p.h>
@@ -76,6 +78,8 @@ private slots:
void checkParentChangeToOtherParent();
void checkParentChangeFromExistingBackendParentToNewlyCreatedParent();
void checkBackendNodesCreatedFromTopDown(); //QTBUG-74106
+ void checkBackendNodesCreatedFromTopDownWithReparenting();
+ void checkAllBackendCreationDoneInSingleFrame();
void removingSingleChildNodeFromNode();
void removingMultipleChildNodesFromNode();
@@ -425,6 +429,124 @@ public:
}
};
+class TestAspectPrivate;
+class TestAspect : public Qt3DCore::QAbstractAspect
+{
+ Q_OBJECT
+public:
+ explicit TestAspect(QObject *parent = nullptr);
+
+ enum ChangeType { Creation, Destruction };
+
+ void clearNodes()
+ {
+ events.clear();
+ allNodes.clear();
+ }
+
+ void addEvent(const Qt3DCore::QNodeId &id, ChangeType change)
+ {
+ events.push_back(Event{ change, id});
+ }
+
+ QVector<Qt3DCore::QNodeId> filteredEvents(ChangeType change) const
+ {
+ QVector<Qt3DCore::QNodeId> result;
+ for (const auto &event : events) {
+ if (event.type == change)
+ result.push_back(event.nodeId);
+ }
+ return result;
+ }
+
+ struct Event{
+ ChangeType type;
+ Qt3DCore::QNodeId nodeId;
+ };
+
+ mutable QVector<Event> events;
+ mutable QHash<Qt3DCore::QNodeId, Qt3DCore::QNode *> allNodes;
+
+private:
+ Q_DECLARE_PRIVATE(TestAspect)
+ explicit TestAspect(TestAspectPrivate &dd, QObject *parent);
+};
+
+class TestFunctor : public Qt3DCore::QBackendNodeMapper
+{
+public:
+ TestFunctor(TestAspect *aspect) : m_aspect(aspect) {}
+
+ Qt3DCore::QBackendNode *create(const Qt3DCore::QNodeCreatedChangeBasePtr &change) const override
+ {
+ auto node = new Qt3DCore::QBackendNode;
+ m_Nodes.insert(change->subjectId(), node);
+ m_aspect->addEvent(change->subjectId(), TestAspect::Creation);
+ return node;
+ }
+
+ Qt3DCore::QBackendNode *get(Qt3DCore::QNodeId id) const override
+ {
+ return m_Nodes.value(id, nullptr);
+ }
+
+ void destroy(Qt3DCore::QNodeId id) const override
+ {
+ if (m_Nodes.contains(id)) {
+ m_aspect->addEvent(id, TestAspect::Destruction);
+ delete m_Nodes.take(id);
+ }
+ }
+
+private:
+ mutable QHash<Qt3DCore::QNodeId, Qt3DCore::QBackendNode *> m_Nodes;
+ TestAspect *m_aspect;
+};
+
+class TestAspectPrivate : public Qt3DCore::QAbstractAspectPrivate
+{
+public:
+ TestAspectPrivate() = default;
+ void syncDirtyFrontEndNode(Qt3DCore::QNode *node, Qt3DCore::QBackendNode *backend,
+ bool firstTime) const override
+ {
+ Q_UNUSED(backend);
+ auto q = q_func();
+ if (firstTime)
+ q->allNodes.insert(node->id(), node);
+ }
+
+ Q_DECLARE_PUBLIC(TestAspect)
+};
+
+TestAspect::TestAspect(QObject *parent) : TestAspect(*new TestAspectPrivate, parent)
+{
+ registerBackendType<Qt3DCore::QEntity, true>(QSharedPointer<TestFunctor>::create(this));
+ registerBackendType<MyQEntity, true>(QSharedPointer<TestFunctor>::create(this));
+ registerBackendType<MyQNode, true>(QSharedPointer<TestFunctor>::create(this));
+ registerBackendType<Qt3DCore::QNode, true>(QSharedPointer<TestFunctor>::create(this));
+}
+
+TestAspect::TestAspect(TestAspectPrivate &dd, QObject *parent)
+ : Qt3DCore::QAbstractAspect(dd, parent)
+{
+ setObjectName(QStringLiteral("Test Aspect"));
+}
+
+namespace {
+void verifyChildrenCreatedBeforeParents(Qt3DCore::QNode *root, TestAspect *aspect)
+{
+ QSet<Qt3DCore::QNodeId> processedNodes;
+ processedNodes.insert(root->id());
+ for (const auto &nodeId : aspect->filteredEvents(TestAspect::Creation)) {
+ const auto node = aspect->allNodes.value(nodeId);
+ Q_ASSERT(node);
+ const auto parentNode = node->parentNode();
+ QVERIFY(parentNode == nullptr || processedNodes.contains(parentNode->id()));
+ processedNodes.insert(nodeId);
+ }
+}
+}
void tst_Nodes::initTestCase()
{
@@ -802,17 +924,27 @@ void tst_Nodes::checkParentChangeFromExistingBackendParentToNewlyCreatedParent()
Qt3DCore::QAspectEngine engine;
QScopedPointer<MyQEntity> root(new MyQEntity());
root->setArbiterAndEngine(&spy, &engine);
+ auto aspect = new TestAspect;
+ engine.registerAspect(aspect);
+
MyQNode *child(new MyQNode(root.data()));
MyQNode *child2(new MyQNode(root.data()));
+
QCoreApplication::processEvents();
// Due to the way we create root, it has a backend
QVERIFY(Qt3DCore::QNodePrivate::get(root.data())->m_hasBackendNode == true);
+ QCOMPARE(aspect->events.count(), 2);
+ QCOMPARE(aspect->events[0].type, TestAspect::Creation);
+ QCOMPARE(aspect->events[0].nodeId, child->id());
+ QCOMPARE(aspect->events[1].type, TestAspect::Creation);
+ QCOMPARE(aspect->events[1].nodeId, child2->id());
// THEN
QCOMPARE(spy.events.size(), 2); // 2 x (1 child added to parent change)
// WHEN -> Reparenting child with backend node to new parent with no backend yet
+ aspect->clearNodes();
spy.events.clear();
QScopedPointer<Qt3DCore::QNode> newParent(new MyQNode(root.data()));
child->setParent(newParent.data());
@@ -831,8 +963,8 @@ void tst_Nodes::checkParentChangeFromExistingBackendParentToNewlyCreatedParent()
QCoreApplication::processEvents();
// THEN
- QCOMPARE(spy.events.size(), 3);
- // 1 node removed change, 1 node destroyed change
+ QCOMPARE(spy.events.size(), 2);
+ // 1 node removed change
// 1 node added to children change
QVERIFY(Qt3DCore::QNodePrivate::get(newParent.data())->m_hasBackendNode == true);
QVERIFY(Qt3DCore::QNodePrivate::get(child)->m_hasBackendNode == true);
@@ -846,33 +978,27 @@ void tst_Nodes::checkParentChangeFromExistingBackendParentToNewlyCreatedParent()
QCOMPARE(event->removedNodeId(), child->id());
QCOMPARE(event->metaObject(), child->metaObject());
- // CHECK event 2 is a Node Destroyed
- QVERIFY(spy.events.first().wasLocked());
- const Qt3DCore::QNodeDestroyedChangePtr event2 = spy.events.takeFirst().change().staticCast<Qt3DCore::QNodeDestroyedChange>();
- QCOMPARE(event2->type(), Qt3DCore::NodeDeleted);
- QCOMPARE(event2->subtreeIdsAndTypes().size(), 1);
- QCOMPARE(event2->subtreeIdsAndTypes().first().id, child->id());
-
-// // CHECK event 3 and 4 are Node Created events
-// const Qt3DCore::QNodeCreatedChangeBasePtr event3 = spy.events.takeFirst().change().staticCast<Qt3DCore::QNodeCreatedChangeBase>();
-// const Qt3DCore::QNodeCreatedChangeBasePtr event4 = spy.events.takeFirst().change().staticCast<Qt3DCore::QNodeCreatedChangeBase>();
-
-// QCOMPARE(event3->type(), Qt3DCore::NodeCreated);
-// QCOMPARE(event3->parentId(), root->id());
-// QCOMPARE(event3->subjectId(), newParent->id());
-
-// QCOMPARE(event4->type(), Qt3DCore::NodeCreated);
-// QCOMPARE(event4->parentId(), newParent->id());
-// QCOMPARE(event4->subjectId(), child->id());
-
- const Qt3DCore::QPropertyNodeAddedChangePtr event5 = spy.events.takeFirst().change().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(event5->type(), Qt3DCore::PropertyValueAdded);
- QCOMPARE(event5->addedNodeId(), newParent->id());
- QCOMPARE(event5->metaObject(), newParent->metaObject());
- QCOMPARE(event5->subjectId(), root->id());
+ const Qt3DCore::QPropertyNodeAddedChangePtr event2 = spy.events.takeFirst().change().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
+ QCOMPARE(event2->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(event2->addedNodeId(), newParent->id());
+ QCOMPARE(event2->metaObject(), newParent->metaObject());
+ QCOMPARE(event2->subjectId(), root->id());
+
+ QCOMPARE(aspect->events.count(), 3);
+
+ // child backend is destroyed because it was reparented to node without backend (newParent)
+ QCOMPARE(aspect->events[0].type, TestAspect::Destruction);
+ QCOMPARE(aspect->events[0].nodeId, child->id());
+
+ // newParent and child both get backends created
+ QCOMPARE(aspect->events[1].type, TestAspect::Creation);
+ QCOMPARE(aspect->events[1].nodeId, newParent->id());
+ QCOMPARE(aspect->events[2].type, TestAspect::Creation);
+ QCOMPARE(aspect->events[2].nodeId, child->id());
}
// WHEN -> Changing parent to node with existing backend
+ aspect->clearNodes();
child->setParent(child2);
// THEN
@@ -913,8 +1039,8 @@ void tst_Nodes::checkParentChangeFromExistingBackendParentToNewlyCreatedParent()
QCoreApplication::processEvents();
// THEN
- QCOMPARE(spy.events.size(), 3);
- // 1 node removed change, 1 node destroyed change,
+ QCOMPARE(spy.events.size(), 2);
+ // 1 node removed change
// 1 node added to children change
{
// CHECK event 1 is a Node Removed event
@@ -925,30 +1051,15 @@ void tst_Nodes::checkParentChangeFromExistingBackendParentToNewlyCreatedParent()
QCOMPARE(event->removedNodeId(), child->id());
QCOMPARE(event->metaObject(), child->metaObject());
- // CHECK event 2 is a Node Destroyed
- QVERIFY(spy.events.first().wasLocked());
- const Qt3DCore::QNodeDestroyedChangePtr event2 = spy.events.takeFirst().change().staticCast<Qt3DCore::QNodeDestroyedChange>();
- QCOMPARE(event2->type(), Qt3DCore::NodeDeleted);
- QCOMPARE(event2->subtreeIdsAndTypes().size(), 1);
- QCOMPARE(event2->subtreeIdsAndTypes().first().id, child->id());
-
-// // CHECK event 3 and 4 are Node Created events
-// const Qt3DCore::QNodeCreatedChangeBasePtr event3 = spy.events.takeFirst().change().staticCast<Qt3DCore::QNodeCreatedChangeBase>();
-// const Qt3DCore::QNodeCreatedChangeBasePtr event4 = spy.events.takeFirst().change().staticCast<Qt3DCore::QNodeCreatedChangeBase>();
-
-// QCOMPARE(event3->type(), Qt3DCore::NodeCreated);
-// QCOMPARE(event3->parentId(), root->id());
-// QCOMPARE(event3->subjectId(), newParent2->id());
-
-// QCOMPARE(event4->type(), Qt3DCore::NodeCreated);
-// QCOMPARE(event4->parentId(), newParent2->id());
-// QCOMPARE(event4->subjectId(), child->id());
-
- const Qt3DCore::QPropertyNodeAddedChangePtr event5 = spy.events.takeFirst().change().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(event5->type(), Qt3DCore::PropertyValueAdded);
- QCOMPARE(event5->addedNodeId(), newParent2->id());
- QCOMPARE(event5->metaObject(), newParent2->metaObject());
- QCOMPARE(event5->subjectId(), root->id());
+ const Qt3DCore::QPropertyNodeAddedChangePtr event2 = spy.events.takeFirst().change().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
+ QCOMPARE(event2->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(event2->addedNodeId(), newParent2->id());
+ QCOMPARE(event2->metaObject(), newParent2->metaObject());
+ QCOMPARE(event2->subjectId(), root->id());
+
+ // child backend is destroyed because it was reparented to node without backend (newParent)
+ QCOMPARE(aspect->events[0].type, TestAspect::Destruction);
+ QCOMPARE(aspect->events[0].nodeId, child->id());
}
}
@@ -960,7 +1071,10 @@ void tst_Nodes::checkBackendNodesCreatedFromTopDown()
// GIVEN
ObserverSpy spy;
Qt3DCore::QAspectEngine engine;
+ auto aspect = new TestAspect;
+ engine.registerAspect(aspect);
QScopedPointer<MyQEntity> root(new MyQEntity());
+
root->setArbiterAndEngine(&spy, &engine);
QScopedPointer<Qt3DCore::QNode> parentWithBackend(new MyQNode(root.data()));
@@ -974,7 +1088,7 @@ void tst_Nodes::checkBackendNodesCreatedFromTopDown()
MyQNode *dummyParent(new MyQNode(parentWithBackend.data()));
MyQNode *child1(new MyQNode(parentWithBackend.data()));
MyQNode *child2(new MyQNode(dummyParent));
- child2->setNodeProperty(child1);
+ child1->setNodeProperty(child2);
// THEN - we should have no events because the new nodes have no backend yet
QCOMPARE(spy.events.count(), 0);
@@ -997,41 +1111,68 @@ void tst_Nodes::checkBackendNodesCreatedFromTopDown()
QVERIFY(Qt3DCore::QNodePrivate::get(child1)->m_hasBackendNode);
QVERIFY(Qt3DCore::QNodePrivate::get(child2)->m_hasBackendNode);
- // 1st event: dummyParent creation
-// const auto event1 = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>();
-// QVERIFY(!event1.isNull());
-// QCOMPARE(event1->type(), Qt3DCore::NodeCreated);
-// QCOMPARE(event1->parentId(), parentWithBackend->id());
-// QCOMPARE(event1->subjectId(), dummyParent->id());
-
-// // 2nd event: child2 creation (even though we constructed child1 first)
-// const auto event2 = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>();
-// QVERIFY(!event2.isNull());
-// QCOMPARE(event2->type(), Qt3DCore::NodeCreated);
-// QCOMPARE(event2->parentId(), dummyParent->id());
-// QCOMPARE(event2->subjectId(), child2->id());
-
- // 3rd event: dummyParent added to parent
- const auto event3 = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(event3->type(), Qt3DCore::PropertyValueAdded);
- QCOMPARE(event3->addedNodeId(), dummyParent->id());
- QCOMPARE(event3->subjectId(), parentWithBackend->id());
-
- // 4th event: child1 creation
-// const auto event4 = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>();
-// QVERIFY(!event4.isNull());
-// QCOMPARE(event4->type(), Qt3DCore::NodeCreated);
-// QCOMPARE(event4->parentId(), parentWithBackend->id());
-// QCOMPARE(event4->subjectId(), child1->id());
-
- // 5th event: child 1 added to parent
- const auto event5 = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(event5->type(), Qt3DCore::PropertyValueAdded);
- QCOMPARE(event5->addedNodeId(), child1->id());
- QCOMPARE(event5->subjectId(), parentWithBackend->id());
+ // 1st event: dummyParent added to parent
+ const auto event = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyNodeAddedChange>();
+ QCOMPARE(event->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(event->addedNodeId(), dummyParent->id());
+ QCOMPARE(event->subjectId(), parentWithBackend->id());
+
+ // 2nd event: child 1 added to parent
+ const auto event2 = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyNodeAddedChange>();
+ QCOMPARE(event2->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(event2->addedNodeId(), child1->id());
+ QCOMPARE(event2->subjectId(), parentWithBackend->id());
+
+ verifyChildrenCreatedBeforeParents(root.get(), aspect);
}
+
}
+void tst_Nodes::checkBackendNodesCreatedFromTopDownWithReparenting()
+{
+ // GIVEN
+ ObserverSpy spy;
+ Qt3DCore::QAspectEngine engine;
+ auto aspect = new TestAspect;
+ engine.registerAspect(aspect);
+ QScopedPointer<MyQEntity> root(new MyQEntity());
+
+ root->setArbiterAndEngine(&spy, &engine);
+ QScopedPointer<Qt3DCore::QNode> parentWithBackend(new MyQNode(root.data()));
+
+ // create parent backend node
+ QCoreApplication::processEvents();
+ QCoreApplication::processEvents();
+ QVERIFY(Qt3DCore::QNodePrivate::get(parentWithBackend.get())->m_hasBackendNode);
+
+ // WHEN -> creating a node with a parent with backend, then reparenting it to another
+ // parent with backend created after it.
+ spy.events.clear();
+ auto node1 = new MyQNode(parentWithBackend.data());
+ auto parent1 = new MyQNode(parentWithBackend.data());
+ node1->setParent(parent1);
+
+ QCoreApplication::processEvents();
+
+ // THEN
+ QVERIFY(node1->parent() == parent1);
+ QVERIFY(parent1->parent() == parentWithBackend.data());
+ verifyChildrenCreatedBeforeParents(root.get(), aspect);
+
+
+ // WHEN -> creating 2 nodes with no parent and reparenting the first to the second
+ auto node2 = new MyQNode(nullptr);
+ auto parent2 = new MyQNode(nullptr);
+ node2->setParent(parent2);
+ parent2->setParent(parentWithBackend.get());
+
+ QCoreApplication::processEvents();
+
+ // THEN
+ QVERIFY(node2->parent() == parent2);
+ QVERIFY(parent2->parent() == parentWithBackend.data());
+ verifyChildrenCreatedBeforeParents(root.get(), aspect);
+}
void tst_Nodes::removingSingleChildNodeFromNode()
{
@@ -1060,21 +1201,59 @@ void tst_Nodes::removingSingleChildNodeFromNode()
QVERIFY(child->parent() == nullptr);
QVERIFY(root->children().count() == 0);
- QCOMPARE(spy.events.size(), 2);
+ QCOMPARE(spy.events.size(), 1);
QVERIFY(spy.events.first().wasLocked());
const Qt3DCore::QPropertyNodeRemovedChangePtr removalEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyNodeRemovedChange>();
QCOMPARE(removalEvent->subjectId(), root->id());
QCOMPARE(removalEvent->removedNodeId(), child->id());
QCOMPARE(removalEvent->metaObject(), child->metaObject());
+}
- QVERIFY(spy.events.first().wasLocked());
- const Qt3DCore::QNodeDestroyedChangePtr destructionEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeDestroyedChange>();
- QCOMPARE(destructionEvent->type(), Qt3DCore::NodeDeleted);
- QCOMPARE(destructionEvent->subjectId(), child->id());
- QCOMPARE(destructionEvent->subtreeIdsAndTypes().size(), 1);
- QCOMPARE(destructionEvent->subtreeIdsAndTypes().first().id, child->id());
- QCOMPARE(destructionEvent->subtreeIdsAndTypes().first().type, child->metaObject());
+void tst_Nodes::checkAllBackendCreationDoneInSingleFrame()
+{
+ // GIVEN
+ ObserverSpy spy;
+ Qt3DCore::QAspectEngine engine;
+ auto aspect = new TestAspect;
+ engine.registerAspect(aspect);
+
+ QScopedPointer<MyQEntity> root(new MyQEntity());
+ root->setArbiterAndEngine(&spy, &engine);
+
+ QCoreApplication::processEvents();
+
+ // THEN
+ // Due to the way we create root, it has a backend
+ QVERIFY(Qt3DCore::QNodePrivate::get(root.data())->m_hasBackendNode == true);
+ QCOMPARE(aspect->events.count(), 1);
+ QCOMPARE(aspect->events[0].type, TestAspect::Creation);
+ QCOMPARE(aspect->events[0].nodeId, root->id());
+
+ // WHEN -> create 2 children:
+ // 1. a child with parent with backend node
+ // 2. a child with no parent that is then reparented to a parent with backend node
+ aspect->clearNodes();
+ auto child1 = new MyQNode(root.data());
+ auto child2 = new MyQNode;
+ child2->setParent(root.data());
+
+ // THEN - reparented child should have a backend node, but other child should
+ // still be waiting
+ QCOMPARE(child1->parent(), root.data());
+ QCOMPARE(child2->parent(), root.data());
+ QVERIFY(Qt3DCore::QNodePrivate::get(child1)->m_hasBackendNode == false);
+ QVERIFY(Qt3DCore::QNodePrivate::get(child2)->m_hasBackendNode == true);
+
+ // WHEN
+ QCoreApplication::processEvents();
+
+ // THEN - both children have their backend nodes actually created.
+ QCOMPARE(aspect->events.count(), 2);
+ QCOMPARE(aspect->events[0].type, TestAspect::Creation);
+ QCOMPARE(aspect->events[0].nodeId, child2->id());
+ QCOMPARE(aspect->events[1].type, TestAspect::Creation);
+ QCOMPARE(aspect->events[1].nodeId, child1->id());
}
void tst_Nodes::removingMultipleChildNodesFromNode()
@@ -1109,24 +1288,15 @@ void tst_Nodes::removingMultipleChildNodesFromNode()
// THEN
QVERIFY(root->children().count() == 0);
- QCOMPARE(spy.events.size(), 20);
+ QCOMPARE(spy.events.size(), 10);
int i = 0;
for (const ObserverSpy::ChangeRecord &r : qAsConst(spy.events)) {
QVERIFY(r.wasLocked());
- const Qt3DCore::QNodeId childId = childIds.at(i / 2);
- if (i % 2 == 0) {
- Qt3DCore::QPropertyNodeRemovedChangePtr additionEvent = r.change().dynamicCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(additionEvent->subjectId(), root->id());
- QCOMPARE(additionEvent->removedNodeId(), childId);
- QCOMPARE(additionEvent->metaObject(), &MyQNode::staticMetaObject);
- } else {
- const Qt3DCore::QNodeDestroyedChangePtr event = r.change().dynamicCast<Qt3DCore::QNodeDestroyedChange>();
- QCOMPARE(event->subjectId(), childId);
- QCOMPARE(event->subtreeIdsAndTypes().count(), 1);
- QCOMPARE(event->subtreeIdsAndTypes().first().id, childId);
- QCOMPARE(event->subtreeIdsAndTypes().first().type, &MyQNode::staticMetaObject);
- QCOMPARE(event->type(), Qt3DCore::NodeDeleted);
- }
+ const Qt3DCore::QNodeId childId = childIds.at(i);
+ Qt3DCore::QPropertyNodeRemovedChangePtr additionEvent = r.change().dynamicCast<Qt3DCore::QPropertyNodeRemovedChange>();
+ QCOMPARE(additionEvent->subjectId(), root->id());
+ QCOMPARE(additionEvent->removedNodeId(), childId);
+ QCOMPARE(additionEvent->metaObject(), &MyQNode::staticMetaObject);
++i;
}
}
@@ -1174,6 +1344,8 @@ void tst_Nodes::checkConstructionSetParentMix()
// GIVEN
ObserverSpy spy;
Qt3DCore::QAspectEngine engine;
+ auto aspect = new TestAspect;
+ engine.registerAspect(aspect);
QScopedPointer<MyQEntity> root(new MyQEntity());
// WHEN
@@ -1198,10 +1370,7 @@ void tst_Nodes::checkConstructionSetParentMix()
QCOMPARE(spy.events.size(), 1); // 1 child added (subTree to root)
// Ensure first event is subTreeRoot
-// const Qt3DCore::QNodeCreatedChangeBasePtr firstEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>();
-// QVERIFY(!firstEvent.isNull());
-// QCOMPARE(firstEvent->subjectId(), subTreeRoot->id());
-// QCOMPARE(firstEvent->parentId(), root->id());
+ verifyChildrenCreatedBeforeParents(root.data(), aspect);
const Qt3DCore::QPropertyNodeAddedChangePtr lastEvent = spy.events.takeLast().change().dynamicCast<Qt3DCore::QPropertyNodeAddedChange>();
QVERIFY(!lastEvent.isNull());
@@ -1238,28 +1407,7 @@ void tst_Nodes::checkParentingQEntityToQNode()
QVERIFY(Qt3DCore::QNodePrivate::get(childEntity)->m_hasBackendNode);
QVERIFY(Qt3DCore::QNodePrivate::get(childNode)->m_hasBackendNode);
-
- // Ensure first event is subTreeRoot creation
-// const Qt3DCore::QNodeCreatedChangeBasePtr firstEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>();
-// QVERIFY(!firstEvent.isNull());
-// QCOMPARE(firstEvent->subjectId(), subTreeRoot->id());
-// QCOMPARE(firstEvent->parentId(), root->id());
-
-// // Ensure 2nd event is childEntity creation
-// const Qt3DCore::QNodeCreatedChangeBasePtr secondEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>();
-// QVERIFY(!secondEvent.isNull());
-// QCOMPARE(secondEvent->subjectId(), childEntity->id());
-// QCOMPARE(secondEvent->parentId(), subTreeRoot->id());
-
-// // Ensure 3rd event is childNode creation
-// const Qt3DCore::QNodeCreatedChangeBasePtr thirdEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QNodeCreatedChangeBase>();
-// QVERIFY(!thirdEvent.isNull());
-// QCOMPARE(thirdEvent->subjectId(), childNode->id());
-// QCOMPARE(thirdEvent->parentId(), subTreeRoot->id());
-
-
// WHEN we reparent the childEntity to the childNode (QNode)
-
spy.events.clear();
childEntity->setParent(childNode);
QCoreApplication::processEvents();
@@ -1267,8 +1415,7 @@ void tst_Nodes::checkParentingQEntityToQNode()
// THEN we should get
// - one child removed change for childEntity->subTreeRoot,
// - one child added change for childEntity->childNode,
- // - and one property updated event specifying the correct QEntity parent (subTreeRoot)
- QCOMPARE(spy.events.size(), 3);
+ QCOMPARE(spy.events.size(), 2);
const auto removedEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyNodeRemovedChange>();
QVERIFY(!removedEvent.isNull());
@@ -1278,11 +1425,15 @@ void tst_Nodes::checkParentingQEntityToQNode()
QVERIFY(!addedEvent.isNull());
QCOMPARE(addedEvent->subjectId(), childNode->id());
- const auto parentChangeEvent = spy.events.takeFirst().change().dynamicCast<Qt3DCore::QPropertyUpdatedChange>();
- QVERIFY(!parentChangeEvent.isNull());
- QCOMPARE(parentChangeEvent->subjectId(), childEntity->id());
- QCOMPARE(parentChangeEvent->propertyName(), "parentEntityUpdated");
- QCOMPARE(parentChangeEvent->value().value<Qt3DCore::QNodeId>(), subTreeRoot->id());
+ // The arbiter's dirtyNodes should contain the childEntity and
+ // - the dirty node's parent should be childNode
+ // - the dirty node's parent entity should be the subTreeRoot
+ QCOMPARE(spy.dirtyNodes.size(), 1);
+ const auto dirtyEntity = qobject_cast<Qt3DCore::QEntity*>(spy.dirtyNodes.takeFirst());
+ QVERIFY(dirtyEntity);
+ QCOMPARE(dirtyEntity, childEntity);
+ QCOMPARE(dirtyEntity->parent(), childNode);
+ QCOMPARE(dirtyEntity->parentEntity(), subTreeRoot);
}
void tst_Nodes::checkConstructionWithParent()
@@ -1303,8 +1454,7 @@ void tst_Nodes::checkConstructionWithParent()
auto *node = new MyQNode(root.data());
root->setNodeProperty(node);
- // THEN we should get one creation change, one child added change
- // in that order.
+ // THEN we should get one child added change
QCoreApplication::processEvents();
QCOMPARE(root->children().count(), 1);
QCOMPARE(spy.events.size(), 1); // 1 child added change
diff --git a/tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp b/tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp
index 79790d467..e54193398 100644
--- a/tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp
+++ b/tests/auto/core/qchangearbiter/tst_qchangearbiter.cpp
@@ -43,7 +43,6 @@
#include <Qt3DCore/qentity.h>
#include <Qt3DCore/qcomponent.h>
#include <Qt3DCore/qbackendnode.h>
-#include <Qt3DCore/private/qsceneobserverinterface_p.h>
#include <Qt3DCore/private/qnode_p.h>
#include <Qt3DCore/private/qbackendnode_p.h>
#include <QThread>
@@ -350,38 +349,6 @@ private:
bool m_allowFrontendNotifications;
};
-class tst_SceneObserver : public Qt3DCore::QSceneObserverInterface
-{
- // QSceneObserverInterface interface
-public:
-// void sceneNodeAdded(Qt3DCore::QSceneChangePtr &e)
-// {
-// QVERIFY(!e.isNull());
-// QVERIFY(e->type() == Qt3DCore::NodeCreated);
-// m_lastChange = e;
-// }
-
- void sceneNodeRemoved(Qt3DCore::QSceneChangePtr &e)
- {
- QVERIFY(!e.isNull());
- QVERIFY((e->type() == Qt3DCore::NodeDeleted));
- m_lastChange = e;
- }
-
- void sceneNodeUpdated(Qt3DCore::QSceneChangePtr &e)
- {
- m_lastChange = e;
- }
-
- Qt3DCore::QSceneChangePtr lastChange() const
- {
- return m_lastChange;
- }
-
-private:
- Qt3DCore::QSceneChangePtr m_lastChange;
-};
-
void tst_QChangeArbiter::registerObservers()
{
// GIVEN
@@ -452,20 +419,11 @@ void tst_QChangeArbiter::registerSceneObserver()
observers << s;
}
- QList<tst_SceneObserver *> sceneObservers;
- for (int i = 0; i < 5; i++) {
- tst_SceneObserver *s = new tst_SceneObserver();
- arbiter->registerSceneObserver(s);
- sceneObservers << s;
- }
-
arbiter->syncChanges();
// THEN
for (tst_SimpleObserver *o : qAsConst(observers))
QVERIFY(o->lastChange().isNull());
- for (tst_SceneObserver *s : qAsConst(sceneObservers))
- QVERIFY(s->lastChange().isNull());
// WHEN
child->setParent(root);
@@ -476,10 +434,6 @@ void tst_QChangeArbiter::registerSceneObserver()
QVERIFY(!o->lastChange().isNull());
QVERIFY(o->lastChange()->type() == Qt3DCore::PropertyValueAdded);
}
-// for (tst_SceneObserver *s : qAsConst(sceneObservers)) {
-// QVERIFY(!s->lastChange().isNull());
-// QVERIFY(s->lastChange()->type() == Qt3DCore::NodeCreated);
-// }
// WHEN
root->sendComponentAddedNotification(&dummyComponent);
@@ -490,10 +444,6 @@ void tst_QChangeArbiter::registerSceneObserver()
QVERIFY(!o->lastChange().isNull());
QVERIFY(o->lastChange()->type() == Qt3DCore::ComponentAdded);
}
-// for (tst_SceneObserver *s : qAsConst(sceneObservers)) {
-// QVERIFY(!s->lastChange().isNull());
-// QVERIFY(s->lastChange()->type() == Qt3DCore::NodeCreated);
-// }
Qt3DCore::QChangeArbiter::destroyThreadLocalChangeQueue(arbiter.data());
}
@@ -585,20 +535,11 @@ void tst_QChangeArbiter::unregisterSceneObservers()
observers << s;
}
- QList<tst_SceneObserver *> sceneObservers;
- for (int i = 0; i < 5; i++) {
- tst_SceneObserver *s = new tst_SceneObserver();
- arbiter->registerSceneObserver(s);
- sceneObservers << s;
- }
-
arbiter->syncChanges();
// THEN
for (tst_SimpleObserver *o : qAsConst(observers))
QVERIFY(o->lastChange().isNull());
- for (tst_SceneObserver *s : qAsConst(sceneObservers))
- QVERIFY(s->lastChange().isNull());
// WHEN
child->setParent(root);
@@ -609,10 +550,6 @@ void tst_QChangeArbiter::unregisterSceneObservers()
QVERIFY(!o->lastChange().isNull());
QVERIFY(o->lastChange()->type() == Qt3DCore::PropertyValueAdded);
}
-// for (tst_SceneObserver *s : qAsConst(sceneObservers)) {
-// QVERIFY(!s->lastChange().isNull());
-// QVERIFY(s->lastChange()->type() == Qt3DCore::NodeCreated);
-// }
// WHEN
root->sendComponentAddedNotification(&dummyComponent);
@@ -623,10 +560,6 @@ void tst_QChangeArbiter::unregisterSceneObservers()
QVERIFY(!o->lastChange().isNull());
QVERIFY(o->lastChange()->type() == Qt3DCore::ComponentAdded);
}
-// for (tst_SceneObserver *s : qAsConst(sceneObservers)) {
-// QVERIFY(!s->lastChange().isNull());
-// QVERIFY(s->lastChange()->type() == Qt3DCore::NodeCreated);
-// }
// WHEN
child->setParent(Q_NODE_NULLPTR);
@@ -637,13 +570,6 @@ void tst_QChangeArbiter::unregisterSceneObservers()
QVERIFY(!o->lastChange().isNull());
QVERIFY(o->lastChange()->type() == Qt3DCore::PropertyValueRemoved);
}
- for (tst_SceneObserver *s : qAsConst(sceneObservers)) {
- QVERIFY(!s->lastChange().isNull());
- QVERIFY(s->lastChange()->type() == Qt3DCore::NodeDeleted);
- }
-
- for (tst_SceneObserver *s : qAsConst(sceneObservers))
- arbiter->unregisterSceneObserver(s);
// WHEN
child->setParent(root);
@@ -654,10 +580,6 @@ void tst_QChangeArbiter::unregisterSceneObservers()
QVERIFY(!o->lastChange().isNull());
QVERIFY(o->lastChange()->type() == Qt3DCore::PropertyValueAdded);
}
- for (tst_SceneObserver *s : qAsConst(sceneObservers)) {
- QVERIFY(!s->lastChange().isNull());
- QVERIFY(s->lastChange()->type() == Qt3DCore::NodeDeleted);
- }
Qt3DCore::QChangeArbiter::destroyThreadLocalChangeQueue(arbiter.data());
}
diff --git a/tests/auto/core/qskeleton/tst_qskeleton.cpp b/tests/auto/core/qskeleton/tst_qskeleton.cpp
index 6ad6e538c..04c9bf7a1 100644
--- a/tests/auto/core/qskeleton/tst_qskeleton.cpp
+++ b/tests/auto/core/qskeleton/tst_qskeleton.cpp
@@ -193,6 +193,9 @@ private Q_SLOTS:
QCOMPARE(spy.count(), 0);
QCOMPARE(arbiter.events.size(), 0);
QCOMPARE(jointCount(), newJointCount);
+
+ // Cleanup
+ QNodePrivate::get(this)->setArbiter(nullptr);
}
};
diff --git a/tests/auto/quick3d/3dcore/3dcore.qml b/tests/auto/quick3d/3dcore/3dcore.qml
index 72514591c..d0a5c6f09 100644
--- a/tests/auto/quick3d/3dcore/3dcore.qml
+++ b/tests/auto/quick3d/3dcore/3dcore.qml
@@ -30,6 +30,7 @@
import Qt3D.Core 2.0 as QQ3Core20
import Qt3D.Core 2.9 as QQ3Core29
import Qt3D.Core 2.10 as QQ3Core210
+import Qt3D.Core 2.14 as QQ3Core214
import QtQuick 2.0
Item {
@@ -47,4 +48,6 @@ Item {
QQ3Core210.Armature {}
QQ3Core210.SkeletonLoader {}
QQ3Core210.Joint {}
+
+ QQ3Core214.Transform {}
}
diff --git a/tests/auto/quick3d/3drender/3drender.qml b/tests/auto/quick3d/3drender/3drender.qml
index 150b7c1fe..8c200f3c0 100644
--- a/tests/auto/quick3d/3drender/3drender.qml
+++ b/tests/auto/quick3d/3drender/3drender.qml
@@ -163,4 +163,7 @@ Item {
QQ3Render20.StencilOperation {} //Qt3DRender::QStencilOperation
QQ3Render20.StencilMask {} //Qt3DRender::QStencilMask
+ QQ3Render214.DepthRange {}
+ QQ3Render214.RasterMode {}
+
}
diff --git a/tests/auto/render/armature/tst_armature.cpp b/tests/auto/render/armature/tst_armature.cpp
index 2c481db7a..4f9380a3b 100644
--- a/tests/auto/render/armature/tst_armature.cpp
+++ b/tests/auto/render/armature/tst_armature.cpp
@@ -56,7 +56,7 @@ private Q_SLOTS:
armature.setSkeleton(skeleton);
// WHEN
- simulateInitialization(&armature, &backendArmature);
+ simulateInitializationSync(&armature, &backendArmature);
// THEN
QCOMPARE(backendArmature.peerId(), armature.id());
@@ -80,7 +80,7 @@ private Q_SLOTS:
armature.setSkeleton(skeleton);
// WHEN
- simulateInitialization(&armature, &backendArmature);
+ simulateInitializationSync(&armature, &backendArmature);
backendArmature.cleanup();
// THEN
@@ -91,24 +91,21 @@ private Q_SLOTS:
void checkPropertyChanges()
{
// GIVEN
+ QArmature armature;
Armature backendArmature;
- Qt3DCore::QPropertyUpdatedChangePtr updateChange;
+ simulateInitializationSync(&armature, &backendArmature);
// WHEN
- updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setPropertyName("enabled");
- updateChange->setValue(true);
- backendArmature.sceneChangeEvent(updateChange);
+ armature.setEnabled(false);
+ backendArmature.syncFromFrontEnd(&armature, false);
// THEN
- QCOMPARE(backendArmature.isEnabled(), true);
+ QCOMPARE(backendArmature.isEnabled(), false);
// WHEN
auto newSkeleton = new QSkeleton();
- updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setPropertyName("skeleton");
- updateChange->setValue(QVariant::fromValue(newSkeleton->id()));
- backendArmature.sceneChangeEvent(updateChange);
+ armature.setSkeleton(newSkeleton);
+ backendArmature.syncFromFrontEnd(&armature, false);
// THEN
QCOMPARE(backendArmature.skeletonId(), newSkeleton->id());
diff --git a/tests/auto/render/attribute/tst_attribute.cpp b/tests/auto/render/attribute/tst_attribute.cpp
index e0f6f6b5c..12b99b37d 100644
--- a/tests/auto/render/attribute/tst_attribute.cpp
+++ b/tests/auto/render/attribute/tst_attribute.cpp
@@ -36,12 +36,15 @@
class tst_Attribute : public Qt3DCore::QBackendNodeTester
{
Q_OBJECT
+
private Q_SLOTS:
void checkPeerPropertyMirroring()
{
// GIVEN
+ TestRenderer renderer;
Qt3DRender::Render::Attribute renderAttribute;
+ renderAttribute.setRenderer(&renderer);
Qt3DRender::QAttribute attribute;
attribute.setAttributeType(Qt3DRender::QAttribute::IndexAttribute);
@@ -59,7 +62,7 @@ private Q_SLOTS:
attribute.setBuffer(&buffer);
// WHEN
- simulateInitialization(&attribute, &renderAttribute);
+ simulateInitializationSync(&attribute, &renderAttribute);
// THEN
QCOMPARE(renderAttribute.peerId(), attribute.id());
@@ -111,7 +114,7 @@ private Q_SLOTS:
attribute.setBuffer(&buffer);
// WHEN
- simulateInitialization(&attribute, &renderAttribute);
+ simulateInitializationSync(&attribute, &renderAttribute);
renderAttribute.cleanup();
// THEN
@@ -130,17 +133,20 @@ private Q_SLOTS:
void checkPropertyChanges()
{
// GIVEN
+ Qt3DRender::QAttribute attribute;
TestRenderer renderer;
Qt3DRender::Render::Attribute renderAttribute;
renderAttribute.setRenderer(&renderer);
+ simulateInitializationSync(&attribute, &renderAttribute);
+ renderAttribute.cleanup();
+ renderer.resetDirty();
QVERIFY(!renderAttribute.isDirty());
+ QVERIFY(!renderer.dirtyBits());
// WHEN
- Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setValue(static_cast<int>(Qt3DRender::QAttribute::Int));
- updateChange->setPropertyName("vertexBaseType");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setVertexBaseType(Qt3DRender::QAttribute::Int);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.vertexBaseType(), Qt3DRender::QAttribute::Int);
@@ -153,10 +159,8 @@ private Q_SLOTS:
QVERIFY(!renderer.dirtyBits());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(3);
- updateChange->setPropertyName("vertexSize");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setVertexSize(3);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.vertexSize(), 3U);
@@ -168,10 +172,8 @@ private Q_SLOTS:
QVERIFY(!renderAttribute.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(static_cast<int>(Qt3DRender::QAttribute::IndexAttribute));
- updateChange->setPropertyName("attributeType");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setAttributeType(Qt3DRender::QAttribute::IndexAttribute);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.attributeType(), Qt3DRender::QAttribute::IndexAttribute);
@@ -183,10 +185,8 @@ private Q_SLOTS:
QVERIFY(!renderAttribute.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(static_cast<int>(Qt3DRender::QAttribute::DrawIndirectAttribute));
- updateChange->setPropertyName("attributeType");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setAttributeType(Qt3DRender::QAttribute::DrawIndirectAttribute);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.attributeType(), Qt3DRender::QAttribute::DrawIndirectAttribute);
@@ -198,10 +198,8 @@ private Q_SLOTS:
QVERIFY(!renderAttribute.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(1340);
- updateChange->setPropertyName("count");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setCount(1340);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.count(), 1340U);
@@ -213,10 +211,8 @@ private Q_SLOTS:
QVERIFY(!renderAttribute.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QStringLiteral("L88"));
- updateChange->setPropertyName("name");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setName(QStringLiteral("L88"));
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.name(), QStringLiteral("L88"));
@@ -228,10 +224,8 @@ private Q_SLOTS:
QVERIFY(!renderAttribute.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(555);
- updateChange->setPropertyName("byteOffset");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setByteOffset(555U);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.byteOffset(), 555U);
@@ -243,10 +237,8 @@ private Q_SLOTS:
QVERIFY(!renderAttribute.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(454);
- updateChange->setPropertyName("byteStride");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setByteStride(454);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.byteStride(), 454U);
@@ -258,10 +250,8 @@ private Q_SLOTS:
QVERIFY(!renderAttribute.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(1450);
- updateChange->setPropertyName("divisor");
- renderAttribute.sceneChangeEvent(updateChange);
+ attribute.setDivisor(1450);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
QCOMPARE(renderAttribute.divisor(), 1450U);
@@ -273,14 +263,12 @@ private Q_SLOTS:
QVERIFY(!renderAttribute.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- Qt3DCore::QNodeId bufferId = Qt3DCore::QNodeId::createId();
- updateChange->setValue(QVariant::fromValue(bufferId));
- updateChange->setPropertyName("buffer");
- renderAttribute.sceneChangeEvent(updateChange);
+ auto buffer = new Qt3DRender::QBuffer();
+ attribute.setBuffer(buffer);
+ renderAttribute.syncFromFrontEnd(&attribute, false);
// THEN
- QCOMPARE(renderAttribute.bufferId(), bufferId);
+ QCOMPARE(renderAttribute.bufferId(), buffer->id());
QVERIFY(renderAttribute.isDirty());
QVERIFY(renderer.dirtyBits() != 0);
diff --git a/tests/auto/render/blitframebuffer/tst_blitframebuffer.cpp b/tests/auto/render/blitframebuffer/tst_blitframebuffer.cpp
index b10c2e88e..f7a6ce214 100644
--- a/tests/auto/render/blitframebuffer/tst_blitframebuffer.cpp
+++ b/tests/auto/render/blitframebuffer/tst_blitframebuffer.cpp
@@ -78,7 +78,7 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::BlitFramebuffer backendBlitFramebuffer;
backendBlitFramebuffer.setRenderer(&renderer);
- simulateInitialization(&blitFramebuffer, &backendBlitFramebuffer);
+ simulateInitializationSync(&blitFramebuffer, &backendBlitFramebuffer);
// THEN
QCOMPARE(backendBlitFramebuffer.isEnabled(), true);
@@ -98,7 +98,7 @@ private Q_SLOTS:
Qt3DRender::Render::BlitFramebuffer backendBlitFramebuffer;
backendBlitFramebuffer.setRenderer(&renderer);
blitFramebuffer.setEnabled(false);
- simulateInitialization(&blitFramebuffer, &backendBlitFramebuffer);
+ simulateInitializationSync(&blitFramebuffer, &backendBlitFramebuffer);
// THEN
QCOMPARE(backendBlitFramebuffer.peerId(), blitFramebuffer.id());
@@ -111,98 +111,84 @@ private Q_SLOTS:
{
// GIVEN
Qt3DRender::Render::BlitFramebuffer backendBlitFramebuffer;
+ Qt3DRender::QBlitFramebuffer blitFramebuffer;
TestRenderer renderer;
backendBlitFramebuffer.setRenderer(&renderer);
+ simulateInitializationSync(&blitFramebuffer, &backendBlitFramebuffer);
{
- // WHEN
- const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendBlitFramebuffer.sceneChangeEvent(change);
-
- // THEN
+ // WHEN
+ const bool newValue = false;
+ blitFramebuffer.setEnabled(newValue);
+ backendBlitFramebuffer.syncFromFrontEnd(&blitFramebuffer, false);
+
+ // THEN
QCOMPARE(backendBlitFramebuffer.isEnabled(), newValue);
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
}
{
- // WHEN
- const Qt3DRender::QRenderTarget sourceRenderTarget;
- const Qt3DCore::QNodeId newValue = sourceRenderTarget.id();
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("sourceRenderTarget");
- change->setValue(QVariant::fromValue(newValue));
- backendBlitFramebuffer.sceneChangeEvent(change);
-
- // THEN
- QCOMPARE(backendBlitFramebuffer.sourceRenderTargetId(), newValue);
+ // WHEN
+ Qt3DRender::QRenderTarget sourceRenderTarget;
+ blitFramebuffer.setSource(&sourceRenderTarget);
+ backendBlitFramebuffer.syncFromFrontEnd(&blitFramebuffer, false);
+
+ // THEN
+ QCOMPARE(backendBlitFramebuffer.sourceRenderTargetId(), sourceRenderTarget.id());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
}
{
- // WHEN
- const Qt3DRender::QRenderTarget destinationRenderTarget;
- const Qt3DCore::QNodeId newValue = destinationRenderTarget.id();
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("destinationRenderTarget");
- change->setValue(QVariant::fromValue(newValue));
- backendBlitFramebuffer.sceneChangeEvent(change);
-
- // THEN
- QCOMPARE(backendBlitFramebuffer.destinationRenderTargetId(), newValue);
+ // WHEN
+ Qt3DRender::QRenderTarget destinationRenderTarget;
+ blitFramebuffer.setDestination(&destinationRenderTarget);
+ backendBlitFramebuffer.syncFromFrontEnd(&blitFramebuffer, false);
+
+ // THEN
+ QCOMPARE(backendBlitFramebuffer.destinationRenderTargetId(), destinationRenderTarget.id());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
}
{
- // WHEN
+ // WHEN
const auto newValue = QRect(0,0,1,1);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("sourceRect");
- change->setValue(QVariant::fromValue(newValue));
- backendBlitFramebuffer.sceneChangeEvent(change);
+ blitFramebuffer.setSourceRect(newValue);
+ backendBlitFramebuffer.syncFromFrontEnd(&blitFramebuffer, false);
- // THEN
+ // THEN
QCOMPARE(backendBlitFramebuffer.sourceRect(), newValue);
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
}
{
- // WHEN
+ // WHEN
const auto newValue = QRect(0,0,1,1);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("destinationRect");
- change->setValue(QVariant::fromValue(newValue));
- backendBlitFramebuffer.sceneChangeEvent(change);
+ blitFramebuffer.setDestinationRect(newValue);
+ backendBlitFramebuffer.syncFromFrontEnd(&blitFramebuffer, false);
- // THEN
+ // THEN
QCOMPARE(backendBlitFramebuffer.destinationRect(), newValue);
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
}
{
- // WHEN
+ // WHEN
const auto newValue = Qt3DRender::QRenderTargetOutput::Color1;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("sourceAttachmentPoint");
- change->setValue(QVariant::fromValue(newValue));
- backendBlitFramebuffer.sceneChangeEvent(change);
+ blitFramebuffer.setSourceAttachmentPoint(newValue);
+ backendBlitFramebuffer.syncFromFrontEnd(&blitFramebuffer, false);
- // THEN
+ // THEN
QCOMPARE(backendBlitFramebuffer.sourceAttachmentPoint(), newValue);
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
}
{
- // WHEN
+ // WHEN
const auto newValue = Qt3DRender::QRenderTargetOutput::Color1;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("destinationAttachmentPoint");
- change->setValue(QVariant::fromValue(newValue));
- backendBlitFramebuffer.sceneChangeEvent(change);
+ blitFramebuffer.setDestinationAttachmentPoint(newValue);
+ backendBlitFramebuffer.syncFromFrontEnd(&blitFramebuffer, false);
- // THEN
+ // THEN
QCOMPARE(backendBlitFramebuffer.destinationAttachmentPoint(), newValue);
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
diff --git a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
index 5f4f26d50..80298780a 100644
--- a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
+++ b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
@@ -55,7 +55,6 @@
#include <Qt3DRender/private/calcboundingvolumejob_p.h>
#include <Qt3DRender/private/calcgeometrytrianglevolumes_p.h>
#include <Qt3DRender/private/loadbufferjob_p.h>
-#include <Qt3DRender/private/updateentityhierarchyjob_p.h>
#include <Qt3DRender/private/buffermanager_p.h>
#include <Qt3DRender/private/geometryrenderermanager_p.h>
#include <Qt3DRender/private/sphere_p.h>
@@ -96,6 +95,23 @@ QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root)
return nodes;
}
+QVector<Qt3DCore::NodeTreeChange> nodeTreeChangesForNodes(const QVector<Qt3DCore::QNode *> nodes)
+{
+ QVector<Qt3DCore::NodeTreeChange> nodeTreeChanges;
+ nodeTreeChanges.reserve(nodes.size());
+
+ for (Qt3DCore::QNode *n : nodes) {
+ nodeTreeChanges.push_back({
+ n->id(),
+ Qt3DCore::QNodePrivate::get(n)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ n
+ });
+ }
+
+ return nodeTreeChanges;
+}
+
class TestAspect : public Qt3DRender::QRenderAspect
{
public:
@@ -106,7 +122,8 @@ public:
QRenderAspect::onRegistered();
const QVector<Qt3DCore::QNode *> nodes = getNodesForCreation(root);
- d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodes);
+ const QVector<Qt3DCore::NodeTreeChange> nodeTreeChanges = nodeTreeChangesForNodes(nodes);
+ d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodeTreeChanges);
Render::Entity *rootEntity = nodeManagers()->lookupResource<Render::Entity, Render::EntityManager>(rootEntityId());
Q_ASSERT(rootEntity);
@@ -139,10 +156,6 @@ namespace {
void runRequiredJobs(Qt3DRender::TestAspect *test)
{
- Qt3DRender::Render::UpdateEntityHierarchyJob updateEntitiesJob;
- updateEntitiesJob.setManager(test->nodeManagers());
- updateEntitiesJob.run();
-
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
updateWorldTransform.setManagers(test->nodeManagers());
@@ -296,13 +309,13 @@ private Q_SLOTS:
Qt3DRender::Render::Buffer *vbufferBackend = test->nodeManagers()->bufferManager()->getOrCreateResource(vbuffer->id());
vbufferBackend->setRenderer(test->renderer());
vbufferBackend->setManager(test->nodeManagers()->bufferManager());
- simulateInitialization(vbuffer, vbufferBackend);
+ simulateInitializationSync(vbuffer, vbufferBackend);
ibuffer->setData(idata);
Qt3DRender::Render::Buffer *ibufferBackend = test->nodeManagers()->bufferManager()->getOrCreateResource(ibuffer->id());
ibufferBackend->setRenderer(test->renderer());
ibufferBackend->setManager(test->nodeManagers()->bufferManager());
- simulateInitialization(ibuffer, ibufferBackend);
+ simulateInitializationSync(ibuffer, ibufferBackend);
Qt3DRender::QGeometry *g = new Qt3DRender::QGeometry;
for (int i = 0; i < 2; ++i)
@@ -336,23 +349,23 @@ private Q_SLOTS:
Qt3DRender::Render::Attribute *attr0Backend = test->nodeManagers()->attributeManager()->getOrCreateResource(attrs[0]->id());
attr0Backend->setRenderer(test->renderer());
- simulateInitialization(attrs[0], attr0Backend);
+ simulateInitializationSync(attrs[0], attr0Backend);
Qt3DRender::Render::Attribute *attr1Backend = test->nodeManagers()->attributeManager()->getOrCreateResource(attrs[1]->id());
attr1Backend->setRenderer(test->renderer());
- simulateInitialization(attrs[1], attr1Backend);
+ simulateInitializationSync(attrs[1], attr1Backend);
Qt3DRender::Render::Geometry *gBackend = test->nodeManagers()->geometryManager()->getOrCreateResource(g->id());
gBackend->setRenderer(test->renderer());
- simulateInitialization(g, gBackend);
+ simulateInitializationSync(g, gBackend);
Qt3DRender::Render::GeometryRenderer *grBackend = test->nodeManagers()->geometryRendererManager()->getOrCreateResource(gr->id());
grBackend->setRenderer(test->renderer());
grBackend->setManager(test->nodeManagers()->geometryRendererManager());
- simulateInitialization(gr, grBackend);
+ simulateInitializationSync(gr, grBackend);
Qt3DRender::Render::Entity *entityBackend = test->nodeManagers()->renderNodesManager()->getOrCreateResource(entity->id());
entityBackend->setRenderer(test->renderer());
- simulateInitialization(entity.data(), entityBackend);
+ simulateInitializationSync(entity.data(), entityBackend);
Qt3DRender::Render::CalculateBoundingVolumeJob calcBVolume;
calcBVolume.setManagers(test->nodeManagers());
@@ -364,10 +377,10 @@ private Q_SLOTS:
qDebug() << radius << center;
// truncate and compare integers only
- QVERIFY(int(radius) == int(expectedRadius));
- QVERIFY(int(center.x()) == int(expectedCenter.x()));
- QVERIFY(int(center.y()) == int(expectedCenter.y()));
- QVERIFY(int(center.z()) == int(expectedCenter.z()));
+ QCOMPARE(int(radius), int(expectedRadius));
+ QCOMPARE(int(center.x()), int(expectedCenter.x()));
+ QCOMPARE(int(center.y()), int(expectedCenter.y()));
+ QCOMPARE(int(center.z()), int(expectedCenter.z()));
}
void checkCustomPackedGeometry()
@@ -408,7 +421,7 @@ private Q_SLOTS:
Qt3DRender::Render::Buffer *vbufferBackend = test->nodeManagers()->bufferManager()->getOrCreateResource(vbuffer->id());
vbufferBackend->setRenderer(test->renderer());
vbufferBackend->setManager(test->nodeManagers()->bufferManager());
- simulateInitialization(vbuffer, vbufferBackend);
+ simulateInitializationSync(vbuffer, vbufferBackend);
Qt3DRender::QGeometry *g = new Qt3DRender::QGeometry;
g->addAttribute(new Qt3DRender::QAttribute);
@@ -430,20 +443,20 @@ private Q_SLOTS:
Qt3DRender::Render::Attribute *attr0Backend = test->nodeManagers()->attributeManager()->getOrCreateResource(attrs[0]->id());
attr0Backend->setRenderer(test->renderer());
- simulateInitialization(attrs[0], attr0Backend);
+ simulateInitializationSync(attrs[0], attr0Backend);
Qt3DRender::Render::Geometry *gBackend = test->nodeManagers()->geometryManager()->getOrCreateResource(g->id());
gBackend->setRenderer(test->renderer());
- simulateInitialization(g, gBackend);
+ simulateInitializationSync(g, gBackend);
Qt3DRender::Render::GeometryRenderer *grBackend = test->nodeManagers()->geometryRendererManager()->getOrCreateResource(gr->id());
grBackend->setRenderer(test->renderer());
grBackend->setManager(test->nodeManagers()->geometryRendererManager());
- simulateInitialization(gr, grBackend);
+ simulateInitializationSync(gr, grBackend);
Qt3DRender::Render::Entity *entityBackend = test->nodeManagers()->renderNodesManager()->getOrCreateResource(entity->id());
entityBackend->setRenderer(test->renderer());
- simulateInitialization(entity.data(), entityBackend);
+ simulateInitializationSync(entity.data(), entityBackend);
Qt3DRender::Render::CalculateBoundingVolumeJob calcBVolume;
calcBVolume.setManagers(test->nodeManagers());
diff --git a/tests/auto/render/buffer/tst_buffer.cpp b/tests/auto/render/buffer/tst_buffer.cpp
index da853d4e9..1487d3728 100644
--- a/tests/auto/render/buffer/tst_buffer.cpp
+++ b/tests/auto/render/buffer/tst_buffer.cpp
@@ -65,6 +65,7 @@ private:
class tst_RenderBuffer : public Qt3DCore::QBackendNodeTester
{
Q_OBJECT
+
private Q_SLOTS:
void checkPeerPropertyMirroring()
@@ -82,7 +83,7 @@ private Q_SLOTS:
// WHEN
renderBuffer.setRenderer(&renderer);
renderBuffer.setManager(&bufferManager);
- simulateInitialization(&buffer, &renderBuffer);
+ simulateInitializationSync(&buffer, &renderBuffer);
// THEN
QCOMPARE(renderBuffer.peerId(), buffer.id());
@@ -98,170 +99,154 @@ private Q_SLOTS:
void checkInitialAndCleanedUpState()
{
// GIVEN
- Qt3DRender::Render::Buffer renderBuffer;
+ Qt3DRender::Render::Buffer backendBuffer;
Qt3DRender::Render::BufferManager bufferManager;
TestRenderer renderer;
// THEN
- QCOMPARE(renderBuffer.isDirty(), false);
- QCOMPARE(renderBuffer.usage(), Qt3DRender::QBuffer::StaticDraw);
- QVERIFY(renderBuffer.data().isEmpty());
- QVERIFY(renderBuffer.peerId().isNull());
- QVERIFY(renderBuffer.dataGenerator().isNull());
- QVERIFY(renderBuffer.pendingBufferUpdates().empty());
+ QCOMPARE(backendBuffer.isDirty(), false);
+ QCOMPARE(backendBuffer.usage(), Qt3DRender::QBuffer::StaticDraw);
+ QVERIFY(backendBuffer.data().isEmpty());
+ QVERIFY(backendBuffer.peerId().isNull());
+ QVERIFY(backendBuffer.dataGenerator().isNull());
+ QVERIFY(backendBuffer.pendingBufferUpdates().empty());
// GIVEN
- Qt3DRender::QBuffer buffer;
- buffer.setUsage(Qt3DRender::QBuffer::DynamicCopy);
- buffer.setData(QByteArrayLiteral("C7"));
- buffer.setDataGenerator(Qt3DRender::QBufferDataGeneratorPtr(new TestFunctor(73)));
+ Qt3DRender::QBuffer frontendBuffer;
+ frontendBuffer.setUsage(Qt3DRender::QBuffer::DynamicCopy);
+ frontendBuffer.setData(QByteArrayLiteral("C7KR4"));
+ frontendBuffer.setDataGenerator(Qt3DRender::QBufferDataGeneratorPtr(new TestFunctor(73)));
// WHEN
- renderBuffer.setManager(&bufferManager);
- renderBuffer.setRenderer(&renderer);
- simulateInitialization(&buffer, &renderBuffer);
+ backendBuffer.setManager(&bufferManager);
+ backendBuffer.setRenderer(&renderer);
+ simulateInitializationSync(&frontendBuffer, &backendBuffer);
- Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- Qt3DRender::QBufferUpdate updateData;
- updateData.offset = 2;
- updateData.data = QByteArrayLiteral("LS5");
- updateChange->setValue(QVariant::fromValue(updateData));
- updateChange->setPropertyName("updateData");
- renderBuffer.sceneChangeEvent(updateChange);
+ frontendBuffer.updateData(2, QByteArrayLiteral("LS5"));
+ backendBuffer.syncFromFrontEnd(&frontendBuffer, false);
// THEN
- QCOMPARE(renderBuffer.usage(), Qt3DRender::QBuffer::DynamicCopy);
- QCOMPARE(renderBuffer.isDirty(), true);
- QCOMPARE(renderBuffer.data(), QByteArrayLiteral("C7LS5"));
- QVERIFY(!renderBuffer.dataGenerator().isNull());
- QVERIFY(!renderBuffer.pendingBufferUpdates().empty());
+ QCOMPARE(backendBuffer.usage(), Qt3DRender::QBuffer::DynamicCopy);
+ QCOMPARE(backendBuffer.isDirty(), true);
+ QCOMPARE(backendBuffer.data(), QByteArrayLiteral("C7LS5"));
+ QVERIFY(!backendBuffer.dataGenerator().isNull());
+ QVERIFY(!backendBuffer.pendingBufferUpdates().empty());
// WHEN
- renderBuffer.cleanup();
+ backendBuffer.cleanup();
// THEN
- QCOMPARE(renderBuffer.isDirty(), false);
- QCOMPARE(renderBuffer.usage(), Qt3DRender::QBuffer::StaticDraw);
- QVERIFY(renderBuffer.data().isEmpty());
- QVERIFY(renderBuffer.dataGenerator().isNull());
- QVERIFY(renderBuffer.pendingBufferUpdates().empty());
+ QCOMPARE(backendBuffer.isDirty(), false);
+ QCOMPARE(backendBuffer.usage(), Qt3DRender::QBuffer::StaticDraw);
+ QVERIFY(backendBuffer.data().isEmpty());
+ QVERIFY(backendBuffer.dataGenerator().isNull());
+ QVERIFY(backendBuffer.pendingBufferUpdates().empty());
}
void checkPropertyChanges()
{
// GIVEN
TestRenderer renderer;
- Qt3DRender::Render::Buffer renderBuffer;
- renderBuffer.setRenderer(&renderer);
+ Qt3DRender::QBuffer frontendBuffer;
+ Qt3DRender::Render::Buffer backendBuffer;
+ backendBuffer.setRenderer(&renderer);
+ simulateInitializationSync(&frontendBuffer, &backendBuffer);
// THEN
- QVERIFY(renderBuffer.data().isEmpty());
- QVERIFY(renderBuffer.usage() != Qt3DRender::QBuffer::DynamicRead);
- QVERIFY(!renderBuffer.isDirty());
- QVERIFY(!(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::BuffersDirty));
+ QVERIFY(backendBuffer.data().isEmpty());
+ QVERIFY(backendBuffer.usage() != Qt3DRender::QBuffer::DynamicRead);
+ QVERIFY(!backendBuffer.isDirty());
+ QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::BuffersDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
// WHEN
- Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setValue(static_cast<int>(Qt3DRender::QBuffer::DynamicRead));
- updateChange->setPropertyName("usage");
- renderBuffer.sceneChangeEvent(updateChange);
+ frontendBuffer.setUsage(Qt3DRender::QBuffer::DynamicRead);
+ backendBuffer.syncFromFrontEnd(&frontendBuffer, false);
// THEN
- QCOMPARE(renderBuffer.usage(), Qt3DRender::QBuffer::DynamicRead);
- QVERIFY(renderBuffer.isDirty());
+ QCOMPARE(backendBuffer.usage(), Qt3DRender::QBuffer::DynamicRead);
+ QVERIFY(backendBuffer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::BuffersDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderBuffer.unsetDirty();
- QVERIFY(!renderBuffer.isDirty());
+ backendBuffer.unsetDirty();
+ QVERIFY(!backendBuffer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QByteArrayLiteral("LS9"));
- updateChange->setPropertyName("data");
- renderBuffer.sceneChangeEvent(updateChange);
+ frontendBuffer.setData(QByteArrayLiteral("LS9SL"));
+ backendBuffer.syncFromFrontEnd(&frontendBuffer, false);
// THEN
- QCOMPARE(renderBuffer.data(), QByteArrayLiteral("LS9"));
- QVERIFY(renderBuffer.isDirty());
- QCOMPARE(renderBuffer.pendingBufferUpdates().size(), 1);
- QCOMPARE(renderBuffer.pendingBufferUpdates().first().offset, -1);
+ QCOMPARE(backendBuffer.data(), QByteArrayLiteral("LS9SL"));
+ QVERIFY(backendBuffer.isDirty());
+ QCOMPARE(backendBuffer.pendingBufferUpdates().size(), 1);
+ QCOMPARE(backendBuffer.pendingBufferUpdates().first().offset, -1);
- renderBuffer.pendingBufferUpdates().clear();
+ backendBuffer.pendingBufferUpdates().clear();
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::BuffersDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderBuffer.unsetDirty();
- QVERIFY(!renderBuffer.isDirty());
+ backendBuffer.unsetDirty();
+ QVERIFY(!backendBuffer.isDirty());
// WHEN
Qt3DRender::QBufferDataGeneratorPtr functor(new TestFunctor(355));
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(functor));
- updateChange->setPropertyName("dataGenerator");
- renderBuffer.sceneChangeEvent(updateChange);
+ frontendBuffer.setDataGenerator(functor);
+ backendBuffer.syncFromFrontEnd(&frontendBuffer, false);
// THEN
- QCOMPARE(renderBuffer.dataGenerator(), functor);
- QVERIFY(renderBuffer.isDirty());
+ QCOMPARE(backendBuffer.dataGenerator(), functor);
+ QVERIFY(backendBuffer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::BuffersDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderBuffer.unsetDirty();
- QVERIFY(!renderBuffer.isDirty());
+ backendBuffer.unsetDirty();
+ QVERIFY(!backendBuffer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(true);
- updateChange->setPropertyName("syncData");
- renderBuffer.sceneChangeEvent(updateChange);
+ frontendBuffer.setSyncData(true);
+ backendBuffer.syncFromFrontEnd(&frontendBuffer, false);
// THEN
- QCOMPARE(renderBuffer.isSyncData(), true);
- QVERIFY(!renderBuffer.isDirty());
+ QCOMPARE(backendBuffer.isSyncData(), true);
+ QVERIFY(!backendBuffer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::BuffersDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
// WHEN
TestArbiter arbiter;
- Qt3DCore::QBackendNodePrivate::get(&renderBuffer)->setArbiter(&arbiter);
- renderBuffer.executeFunctor();
+ Qt3DCore::QBackendNodePrivate::get(&backendBuffer)->setArbiter(&arbiter);
+ backendBuffer.executeFunctor();
// THEN
QCOMPARE(arbiter.events.count(), 1);
Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
QCOMPARE(change->propertyName(), "data");
QCOMPARE(change->value().toByteArray(), QByteArrayLiteral("454"));
- QCOMPARE(renderBuffer.pendingBufferUpdates().size(), 1);
- QCOMPARE(renderBuffer.pendingBufferUpdates().first().offset, -1);
+ QCOMPARE(backendBuffer.pendingBufferUpdates().size(), 1);
+ QCOMPARE(backendBuffer.pendingBufferUpdates().first().offset, -1);
arbiter.events.clear();
- renderBuffer.pendingBufferUpdates().clear();
+ backendBuffer.pendingBufferUpdates().clear();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- Qt3DRender::QBufferUpdate updateData;
- updateData.offset = 2;
- updateData.data = QByteArrayLiteral("LS5");
- updateChange->setValue(QVariant::fromValue(updateData));
- updateChange->setPropertyName("updateData");
- renderBuffer.sceneChangeEvent(updateChange);
+ frontendBuffer.updateData(2, QByteArrayLiteral("LS5"));
+ backendBuffer.syncFromFrontEnd(&frontendBuffer, false);
// THEN
- QVERIFY(!renderBuffer.pendingBufferUpdates().empty());
- QCOMPARE(renderBuffer.pendingBufferUpdates().first().offset, 2);
- QVERIFY(renderBuffer.isDirty());
+ QVERIFY(!backendBuffer.pendingBufferUpdates().empty());
+ QCOMPARE(backendBuffer.pendingBufferUpdates().first().offset, 2);
+ QVERIFY(backendBuffer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::BuffersDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderBuffer.unsetDirty();
- QVERIFY(!renderBuffer.isDirty());
+ backendBuffer.unsetDirty();
+ QVERIFY(!backendBuffer.isDirty());
}
void checkBufferManagerReferenceCount()
@@ -275,7 +260,7 @@ private Q_SLOTS:
// WHEN
renderBuffer.setRenderer(&renderer);
renderBuffer.setManager(&bufferManager);
- simulateInitialization(&buffer, &renderBuffer);
+ simulateInitializationSync(&buffer, &renderBuffer);
// THEN
QVERIFY(bufferManager.takeBuffersToRelease().empty());
@@ -305,7 +290,7 @@ private Q_SLOTS:
QCOMPARE(renderer.dirtyBits(), 0);
// WHEN
- simulateInitialization(&buffer, &renderBuffer);
+ simulateInitializationSync(&buffer, &renderBuffer);
// THEN
QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::BuffersDirty);
diff --git a/tests/auto/render/commons/testaspect.cpp b/tests/auto/render/commons/testaspect.cpp
index 8be6a7833..87ffc56d7 100644
--- a/tests/auto/render/commons/testaspect.cpp
+++ b/tests/auto/render/commons/testaspect.cpp
@@ -37,6 +37,7 @@
#include "testaspect.h"
#include <Qt3DCore/private/qnodevisitor_p.h>
#include <Qt3DCore/private/qnode_p.h>
+#include <Qt3DCore/private/qaspectmanager_p.h>
QT_BEGIN_NAMESPACE
@@ -76,7 +77,12 @@ TestAspect::TestAspect(Qt3DCore::QNode *root)
const QVector<Qt3DCore::QNode *> nodes = getNodesForCreation(root);
for (Qt3DCore::QNode *node : nodes)
- d_func()->createBackendNode(node);
+ d_func()->createBackendNode({
+ node->id(),
+ Qt3DCore::QNodePrivate::get(node)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ node
+ });
}
TestAspect::~TestAspect()
diff --git a/tests/auto/render/commons/testrenderer.h b/tests/auto/render/commons/testrenderer.h
index dbe69ace5..8d27998a0 100644
--- a/tests/auto/render/commons/testrenderer.h
+++ b/tests/auto/render/commons/testrenderer.h
@@ -63,7 +63,7 @@ public:
Qt3DCore::QAspectJobPtr rayCastingJob() override { return Qt3DCore::QAspectJobPtr(); }
Qt3DCore::QAspectJobPtr syncLoadingJobs() override { return Qt3DCore::QAspectJobPtr(); }
Qt3DCore::QAspectJobPtr expandBoundingVolumeJob() override { return Qt3DCore::QAspectJobPtr(); }
- void setSceneRoot(Qt3DCore::QBackendNodeFactory *factory, Qt3DRender::Render::Entity *root) override { Q_UNUSED(factory); Q_UNUSED(root); }
+ void setSceneRoot(Qt3DRender::Render::Entity *root) override { Q_UNUSED(root); }
Qt3DRender::Render::Entity *sceneRoot() const override { return nullptr; }
Qt3DRender::Render::FrameGraphNode *frameGraphRoot() const override { return nullptr; }
Qt3DCore::QAbstractFrameAdvanceService *frameAdvanceService() const override { return nullptr; }
diff --git a/tests/auto/render/coordinatereader/tst_coordinatereader.cpp b/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
index afb18fe55..417684245 100644
--- a/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
+++ b/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
@@ -101,7 +101,7 @@ private Q_SLOTS:
->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
bool ret = reader.setGeometry(backendRenderer, QString(""));
@@ -149,7 +149,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -167,18 +167,18 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()
->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()
->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()
->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
bool ret = reader.setGeometry(backendRenderer,
@@ -232,7 +232,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -250,18 +250,18 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()
->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()
->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()
->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
bool ret = reader.setGeometry(backendRenderer,
@@ -326,7 +326,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -344,18 +344,18 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()
->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()
->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()
->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
bool ret = reader.setGeometry(backendRenderer,
@@ -415,7 +415,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -443,23 +443,23 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(
positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendTexcoordAttribute = nodeManagers->attributeManager()
->getOrCreateResource(texcoordAttribute->id());
backendTexcoordAttribute->setRenderer(&renderer);
- simulateInitialization(texcoordAttribute.data(), backendTexcoordAttribute);
+ simulateInitializationSync(texcoordAttribute.data(), backendTexcoordAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()
->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()
->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
bool ret = reader.setGeometry(backendRenderer,
diff --git a/tests/auto/render/effect/tst_effect.cpp b/tests/auto/render/effect/tst_effect.cpp
index 30df242f4..cb2ca41e1 100644
--- a/tests/auto/render/effect/tst_effect.cpp
+++ b/tests/auto/render/effect/tst_effect.cpp
@@ -72,7 +72,7 @@ private Q_SLOTS:
Qt3DRender::QParameter parameter;
effect.addTechnique(&technique);
effect.addParameter(&parameter);
- simulateInitialization(&effect, &backendEffect);
+ simulateInitializationSync(&effect, &backendEffect);
}
backendEffect.cleanup();
@@ -95,7 +95,7 @@ private Q_SLOTS:
{
// WHEN
Qt3DRender::Render::Effect backendEffect;
- simulateInitialization(&effect, &backendEffect);
+ simulateInitializationSync(&effect, &backendEffect);
// THEN
QCOMPARE(backendEffect.isEnabled(), true);
@@ -109,7 +109,7 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::Effect backendEffect;
effect.setEnabled(false);
- simulateInitialization(&effect, &backendEffect);
+ simulateInitializationSync(&effect, &backendEffect);
// THEN
QCOMPARE(backendEffect.peerId(), effect.id());
@@ -120,17 +120,17 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DRender::QEffect effect;
Qt3DRender::Render::Effect backendEffect;
TestRenderer renderer;
backendEffect.setRenderer(&renderer);
+ simulateInitializationSync(&effect, &backendEffect);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendEffect.sceneChangeEvent(change);
+ effect.setEnabled(newValue);
+ backendEffect.syncFromFrontEnd(&effect, false);
// THEN
QCOMPARE(backendEffect.isEnabled(), newValue);
@@ -139,9 +139,8 @@ private Q_SLOTS:
Qt3DRender::QTechnique technique;
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &technique);
- change->setPropertyName("technique");
- backendEffect.sceneChangeEvent(change);
+ effect.addTechnique(&technique);
+ backendEffect.syncFromFrontEnd(&effect, false);
// THEN
QCOMPARE(backendEffect.techniques().size(), 1);
@@ -149,9 +148,8 @@ private Q_SLOTS:
}
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &technique);
- change->setPropertyName("technique");
- backendEffect.sceneChangeEvent(change);
+ effect.removeTechnique(&technique);
+ backendEffect.syncFromFrontEnd(&effect, false);
// THEN
QCOMPARE(backendEffect.techniques().size(), 0);
@@ -162,9 +160,8 @@ private Q_SLOTS:
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &parameter);
- change->setPropertyName("parameter");
- backendEffect.sceneChangeEvent(change);
+ effect.addParameter(&parameter);
+ backendEffect.syncFromFrontEnd(&effect, false);
// THEN
QCOMPARE(backendEffect.parameters().size(), 1);
@@ -172,9 +169,8 @@ private Q_SLOTS:
}
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &parameter);
- change->setPropertyName("parameter");
- backendEffect.sceneChangeEvent(change);
+ effect.removeParameter(&parameter);
+ backendEffect.syncFromFrontEnd(&effect, false);
// THEN
QCOMPARE(backendEffect.parameters().size(), 0);
diff --git a/tests/auto/render/entity/tst_entity.cpp b/tests/auto/render/entity/tst_entity.cpp
index 08d08404c..463fbbb79 100644
--- a/tests/auto/render/entity/tst_entity.cpp
+++ b/tests/auto/render/entity/tst_entity.cpp
@@ -182,7 +182,6 @@ private slots:
entity.cleanup();
// THEN
- QVERIFY(entity.parentEntityId().isNull());
QVERIFY(entity.componentUuid<Transform>().isNull());
QVERIFY(entity.componentUuid<CameraLens>().isNull());
QVERIFY(entity.componentUuid<Material>().isNull());
@@ -201,29 +200,18 @@ private slots:
QVERIFY(!containsAll);
}
- void checkRebuildingEntityHierarchy()
+ void checkEntityReparenting()
{
// GIVEN
TestRenderer renderer;
NodeManagers nodeManagers;
Qt3DCore::QEntity frontendEntityA, frontendEntityB, frontendEntityC;
- auto entityCreator = [&nodeManagers, &renderer](const Qt3DCore::QEntity &frontEndEntity) {
- Entity *entity = nodeManagers.renderNodesManager()->getOrCreateResource(frontEndEntity.id());
- entity->setNodeManagers(&nodeManagers);
- entity->setRenderer(&renderer);
- return entity;
- };
-
- auto backendA = entityCreator(frontendEntityA);
- auto backendB = entityCreator(frontendEntityB);
- auto backendC = entityCreator(frontendEntityC);
+ auto backendA = createEntity(renderer, nodeManagers, frontendEntityA);
+ auto backendB = createEntity(renderer, nodeManagers, frontendEntityB);
+ auto backendC = createEntity(renderer, nodeManagers, frontendEntityC);
// THEN
- QVERIFY(backendA->parentEntityId().isNull());
- QVERIFY(backendB->parentEntityId().isNull());
- QVERIFY(backendC->parentEntityId().isNull());
-
QVERIFY(backendA->parent() == nullptr);
QVERIFY(backendB->parent() == nullptr);
QVERIFY(backendC->parent() == nullptr);
@@ -233,17 +221,9 @@ private slots:
QVERIFY(backendC->childrenHandles().isEmpty());
// WHEN
- renderer.clearDirtyBits(0);
- QVERIFY(renderer.dirtyBits() == 0);
-
auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) {
- const auto parentChange = QPropertyUpdatedChangePtr::create(entity.id());
- parentChange->setPropertyName("parentEntityUpdated");
- auto parent = entity.parentEntity();
- parentChange->setValue(QVariant::fromValue(parent ? parent->id() : Qt3DCore::QNodeId()));
-
Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id());
- backendEntity->sceneChangeEvent(parentChange);
+ backendEntity->syncFromFrontEnd(&entity, false);
};
// reparent B to A and C to B.
@@ -253,68 +233,111 @@ private slots:
sendParentChange(frontendEntityC);
// THEN
- QVERIFY(renderer.dirtyBits() & AbstractRenderer::EntityHierarchyDirty);
+ QVERIFY(backendA->parent() == nullptr);
+ QVERIFY(backendB->parent() == backendA);
+ QVERIFY(backendC->parent() == backendB);
- QVERIFY(backendA->parentEntityId().isNull());
- QVERIFY(backendB->parentEntityId() == frontendEntityA.id());
- QVERIFY(backendC->parentEntityId() == frontendEntityB.id());
+ QCOMPARE(backendA->childrenHandles().count(), 1);
+ QCOMPARE(backendB->childrenHandles().count(), 1);
+ QVERIFY(backendC->childrenHandles().isEmpty());
+
+ // WHEN - reparent C to A
+ frontendEntityC.setParent(&frontendEntityA);
+ sendParentChange(frontendEntityC);
+ // THEN
+ QVERIFY(backendA->parent() == nullptr);
+ QVERIFY(backendB->parent() == backendA);
+ QVERIFY(backendC->parent() == backendA);
+
+ QCOMPARE(backendA->childrenHandles().size(), 2);
+ QVERIFY(backendB->childrenHandles().isEmpty());
+ QVERIFY(backendC->childrenHandles().isEmpty());
+
+ // WHEN - reparent B to null.
+ frontendEntityB.setParent(static_cast<Qt3DCore::QNode *>(nullptr));
+ sendParentChange(frontendEntityB);
+
+ // THEN
QVERIFY(backendA->parent() == nullptr);
QVERIFY(backendB->parent() == nullptr);
- QVERIFY(backendC->parent() == nullptr);
+ QVERIFY(backendC->parent() == backendA);
- QVERIFY(backendA->childrenHandles().isEmpty());
+ QCOMPARE(backendA->childrenHandles().count(), 1);
+ QVERIFY(!backendA->childrenHandles().contains(backendB->handle()));
QVERIFY(backendB->childrenHandles().isEmpty());
QVERIFY(backendC->childrenHandles().isEmpty());
+ }
+
+ void checkEntityCleanup()
+ {
+ // GIVEN
+ TestRenderer renderer;
+ NodeManagers nodeManagers;
+ Qt3DCore::QEntity frontendEntityA, frontendEntityB, frontendEntityC;
+
+ auto backendA = createEntity(renderer, nodeManagers, frontendEntityA);
+ auto backendB = createEntity(renderer, nodeManagers, frontendEntityB);
+ auto backendC = createEntity(renderer, nodeManagers, frontendEntityC);
// WHEN
- auto rebuildHierarchy = [](Entity *backend) {
- backend->clearEntityHierarchy();
- backend->rebuildEntityHierarchy();
+ auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) {
+ Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id());
+ backendEntity->syncFromFrontEnd(&entity, false);
};
- rebuildHierarchy(backendA);
- rebuildHierarchy(backendB);
- rebuildHierarchy(backendC);
+
+ // reparent B and C to A.
+ frontendEntityB.setParent(&frontendEntityA);
+ sendParentChange(frontendEntityB);
+ frontendEntityC.setParent(&frontendEntityA);
+ sendParentChange(frontendEntityC);
// THEN
QVERIFY(backendA->parent() == nullptr);
QVERIFY(backendB->parent() == backendA);
- QVERIFY(backendC->parent() == backendB);
+ QVERIFY(backendC->parent() == backendA);
- QVERIFY(!backendA->childrenHandles().isEmpty());
- QVERIFY(!backendB->childrenHandles().isEmpty());
+ QCOMPARE(backendA->childrenHandles().count(), 2);
+ QVERIFY(backendB->childrenHandles().isEmpty());
QVERIFY(backendC->childrenHandles().isEmpty());
- // WHEN - reparent B to null.
- frontendEntityB.setParent(static_cast<Qt3DCore::QNode *>(nullptr));
- sendParentChange(frontendEntityB);
- rebuildHierarchy(backendA);
- rebuildHierarchy(backendB);
- rebuildHierarchy(backendC);
+ // WHEN - cleaning up a child
+ backendC->cleanup();
- QVERIFY(backendA->parentEntityId().isNull());
- QVERIFY(backendB->parentEntityId().isNull());
- QVERIFY(backendC->parentEntityId() == frontendEntityB.id());
+ // THEN - the child's parent should be null and it
+ // should be removed from its parent's list of children
+ QVERIFY(backendA->parent() == nullptr);
+ QVERIFY(backendB->parent() == backendA);
+ QVERIFY(backendC->parent() == nullptr);
+
+ QCOMPARE(backendA->childrenHandles().count(), 1);
+ QVERIFY(!backendA->childrenHandles().contains(backendC->handle()));
+ QVERIFY(backendB->childrenHandles().isEmpty());
+ QVERIFY(backendC->childrenHandles().isEmpty());
+
+ // WHEN (cleaning up parent)
+ backendA->cleanup();
+ // THEN (it's children's parent should be set to null)
QVERIFY(backendA->parent() == nullptr);
QVERIFY(backendB->parent() == nullptr);
- QVERIFY(backendC->parent() == backendB);
+ QVERIFY(backendC->parent() == nullptr);
QVERIFY(backendA->childrenHandles().isEmpty());
- QVERIFY(!backendB->childrenHandles().isEmpty());
+ QVERIFY(backendB->childrenHandles().isEmpty());
QVERIFY(backendC->childrenHandles().isEmpty());
- // WHEN - cleanup
- backendA->cleanup();
+ // WHEN
backendB->cleanup();
- backendC->cleanup();
- // THEN
- QVERIFY(backendA->parentEntityId().isNull());
- QVERIFY(backendB->parentEntityId().isNull());
- QVERIFY(backendC->parentEntityId().isNull());
+ // THEN nothing should change
+ QVERIFY(backendA->childrenHandles().isEmpty());
+ QVERIFY(backendB->childrenHandles().isEmpty());
+ QVERIFY(backendC->childrenHandles().isEmpty());
- QVERIFY(renderer.dirtyBits() != 0);
+ QVERIFY(backendA->parent() == nullptr);
+ QVERIFY(backendB->parent() == nullptr);
+ QVERIFY(backendC->parent() == nullptr);
}
void shouldHandleSingleComponentEvents_data()
@@ -446,27 +469,13 @@ private slots:
NodeManagers nodeManagers;
Qt3DCore::QEntity frontendEntityA, frontendEntityB, frontendEntityC;
- auto entityCreator = [&nodeManagers, &renderer](const Qt3DCore::QEntity &frontEndEntity) {
- HEntity renderNodeHandle = nodeManagers.renderNodesManager()->getOrAcquireHandle(frontEndEntity.id());
- Entity *entity = nodeManagers.renderNodesManager()->data(renderNodeHandle);
- entity->setNodeManagers(&nodeManagers);
- entity->setHandle(renderNodeHandle);
- entity->setRenderer(&renderer);
- return entity;
- };
-
- auto backendA = entityCreator(frontendEntityA);
- auto backendB = entityCreator(frontendEntityB);
- auto backendC = entityCreator(frontendEntityC);
+ auto backendA = createEntity(renderer, nodeManagers, frontendEntityA);
+ auto backendB = createEntity(renderer, nodeManagers, frontendEntityB);
+ auto backendC = createEntity(renderer, nodeManagers, frontendEntityC);
auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) {
- const auto parentChange = QPropertyUpdatedChangePtr::create(entity.id());
- parentChange->setPropertyName("parentEntityUpdated");
- auto parent = entity.parentEntity();
- parentChange->setValue(QVariant::fromValue(parent ? parent->id() : Qt3DCore::QNodeId()));
-
Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id());
- backendEntity->sceneChangeEvent(parentChange);
+ backendEntity->syncFromFrontEnd(&entity, false);
};
// reparent B to A and C to B.
@@ -475,14 +484,6 @@ private slots:
frontendEntityC.setParent(&frontendEntityB);
sendParentChange(frontendEntityC);
- auto rebuildHierarchy = [](Entity *backend) {
- backend->clearEntityHierarchy();
- backend->rebuildEntityHierarchy();
- };
- rebuildHierarchy(backendA);
- rebuildHierarchy(backendB);
- rebuildHierarchy(backendC);
-
// WHEN
int visitCount = 0;
auto counter = [&visitCount](const Entity *) { ++visitCount; };
@@ -499,27 +500,17 @@ private slots:
NodeManagers nodeManagers;
Qt3DCore::QEntity frontendEntityA, frontendEntityB, frontendEntityC;
- auto entityCreator = [&nodeManagers, &renderer](const Qt3DCore::QEntity &frontEndEntity) {
- HEntity renderNodeHandle = nodeManagers.renderNodesManager()->getOrAcquireHandle(frontEndEntity.id());
- Entity *entity = nodeManagers.renderNodesManager()->data(renderNodeHandle);
- entity->setNodeManagers(&nodeManagers);
- entity->setHandle(renderNodeHandle);
- entity->setRenderer(&renderer);
- return entity;
- };
+ frontendEntityA.setEnabled(false);
+ frontendEntityB.setEnabled(false);
+ frontendEntityC.setEnabled(false);
- auto backendA = entityCreator(frontendEntityA);
- auto backendB = entityCreator(frontendEntityB);
- auto backendC = entityCreator(frontendEntityC);
+ auto backendA = createEntity(renderer, nodeManagers, frontendEntityA);
+ auto backendB = createEntity(renderer, nodeManagers, frontendEntityB);
+ auto backendC = createEntity(renderer, nodeManagers, frontendEntityC);
auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) {
- const auto parentChange = QPropertyUpdatedChangePtr::create(entity.id());
- parentChange->setPropertyName("parentEntityUpdated");
- auto parent = entity.parentEntity();
- parentChange->setValue(QVariant::fromValue(parent ? parent->id() : Qt3DCore::QNodeId()));
-
Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id());
- backendEntity->sceneChangeEvent(parentChange);
+ backendEntity->syncFromFrontEnd(&entity, false);
};
// reparent B to A and C to B.
@@ -528,14 +519,6 @@ private slots:
frontendEntityC.setParent(&frontendEntityB);
sendParentChange(frontendEntityC);
- auto rebuildHierarchy = [](Entity *backend) {
- backend->clearEntityHierarchy();
- backend->rebuildEntityHierarchy();
- };
- rebuildHierarchy(backendA);
- rebuildHierarchy(backendB);
- rebuildHierarchy(backendC);
-
// WHEN
CompleteVisitor v1(&nodeManagers);
EnabledVisitor v2(&nodeManagers);
@@ -547,8 +530,8 @@ private slots:
// THEN
QCOMPARE(v1.count, 3);
- QCOMPARE(v2.count, 1); // nodes disabled by default but the first one is still visited before visitation finds out it's disabled
- QCOMPARE(v3.count, 0); // nodes disabled by default
+ QCOMPARE(v2.count, 1); // nodes disabled but the first one is still visited before visitation finds out it's disabled
+ QCOMPARE(v3.count, 0); // nodes disabled
}
void accumulator()
@@ -558,27 +541,17 @@ private slots:
NodeManagers nodeManagers;
Qt3DCore::QEntity frontendEntityA, frontendEntityB, frontendEntityC;
- auto entityCreator = [&nodeManagers, &renderer](const Qt3DCore::QEntity &frontEndEntity) {
- HEntity renderNodeHandle = nodeManagers.renderNodesManager()->getOrAcquireHandle(frontEndEntity.id());
- Entity *entity = nodeManagers.renderNodesManager()->data(renderNodeHandle);
- entity->setNodeManagers(&nodeManagers);
- entity->setHandle(renderNodeHandle);
- entity->setRenderer(&renderer);
- return entity;
- };
+ frontendEntityA.setEnabled(false);
+ frontendEntityB.setEnabled(false);
+ frontendEntityC.setEnabled(false);
- auto backendA = entityCreator(frontendEntityA);
- auto backendB = entityCreator(frontendEntityB);
- auto backendC = entityCreator(frontendEntityC);
+ auto backendA = createEntity(renderer, nodeManagers, frontendEntityA);
+ auto backendB = createEntity(renderer, nodeManagers, frontendEntityB);
+ auto backendC = createEntity(renderer, nodeManagers, frontendEntityC);
auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) {
- const auto parentChange = QPropertyUpdatedChangePtr::create(entity.id());
- parentChange->setPropertyName("parentEntityUpdated");
- auto parent = entity.parentEntity();
- parentChange->setValue(QVariant::fromValue(parent ? parent->id() : Qt3DCore::QNodeId()));
-
Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id());
- backendEntity->sceneChangeEvent(parentChange);
+ backendEntity->syncFromFrontEnd(&entity, false);
};
// reparent B to A and C to B.
@@ -587,14 +560,6 @@ private slots:
frontendEntityC.setParent(&frontendEntityB);
sendParentChange(frontendEntityC);
- auto rebuildHierarchy = [](Entity *backend) {
- backend->clearEntityHierarchy();
- backend->rebuildEntityHierarchy();
- };
- rebuildHierarchy(backendA);
- rebuildHierarchy(backendB);
- rebuildHierarchy(backendC);
-
// WHEN
EntityAccumulator v1(&nodeManagers);
EntityAccumulator v2([](Entity *e) { return e->isEnabled(); }, &nodeManagers);
@@ -605,6 +570,18 @@ private slots:
QCOMPARE(r1.count(), 3);
QCOMPARE(r2.count(), 0);
}
+
+private:
+ Entity *createEntity(TestRenderer &renderer, NodeManagers &nodeManagers, const Qt3DCore::QEntity &frontEndEntity) {
+ HEntity renderNodeHandle = nodeManagers.renderNodesManager()->getOrAcquireHandle(frontEndEntity.id());
+ Entity *entity = nodeManagers.renderNodesManager()->data(renderNodeHandle);
+ entity->setNodeManagers(&nodeManagers);
+ entity->setHandle(renderNodeHandle);
+ entity->setRenderer(&renderer);
+ entity->syncFromFrontEnd(&frontEndEntity, true);
+ return entity;
+ }
+
};
QTEST_APPLESS_MAIN(tst_RenderEntity)
diff --git a/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp b/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp
index 80a6ae519..25262a772 100644
--- a/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp
+++ b/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp
@@ -81,7 +81,12 @@ public:
});
for (const auto node: nodes)
- d_func()->createBackendNode(node);
+ d_func()->createBackendNode({
+ node->id(),
+ Qt3DCore::QNodePrivate::get(node)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ node
+ });
}
~TestAspect()
diff --git a/tests/auto/render/framegraphnode/framegraphnode.pro b/tests/auto/render/framegraphnode/framegraphnode.pro
index 577bc9775..f47fc1866 100644
--- a/tests/auto/render/framegraphnode/framegraphnode.pro
+++ b/tests/auto/render/framegraphnode/framegraphnode.pro
@@ -8,3 +8,4 @@ CONFIG += testcase
SOURCES += tst_framegraphnode.cpp
include(../commons/commons.pri)
+include(../../core/common/common.pri)
diff --git a/tests/auto/render/framegraphnode/tst_framegraphnode.cpp b/tests/auto/render/framegraphnode/tst_framegraphnode.cpp
index 22bd872dc..4ad1ce6f5 100644
--- a/tests/auto/render/framegraphnode/tst_framegraphnode.cpp
+++ b/tests/auto/render/framegraphnode/tst_framegraphnode.cpp
@@ -33,6 +33,7 @@
#include <Qt3DCore/qpropertyupdatedchange.h>
#include <Qt3DCore/private/qnodecreatedchangegenerator_p.h>
#include "testrenderer.h"
+#include "qbackendnodetester.h"
class MyFrameGraphNode : public Qt3DRender::Render::FrameGraphNode
{
@@ -52,12 +53,12 @@ public:
{}
};
-class tst_FrameGraphNode : public QObject
+class tst_FrameGraphNode : public Qt3DCore::QBackendNodeTester
{
Q_OBJECT
public:
tst_FrameGraphNode(QObject *parent = nullptr)
- : QObject(parent)
+ : Qt3DCore::QBackendNodeTester(parent)
{}
~tst_FrameGraphNode()
@@ -216,10 +217,9 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
- const Qt3DCore::QNodeId fgNode1Id = Qt3DCore::QNodeId::createId();
-
- Qt3DRender::Render::FrameGraphNode *backendFGNode = new MyFrameGraphNode();
+ Qt3DRender::QFrameGraphNode *frontendFGNode = new MyQFrameGraphNode();
Qt3DRender::QFrameGraphNode *frontendFGChild = new MyQFrameGraphNode();
+ Qt3DRender::Render::FrameGraphNode *backendFGNode = new MyFrameGraphNode();
Qt3DRender::Render::FrameGraphNode *backendFGChild = new MyFrameGraphNode();
QScopedPointer<Qt3DRender::Render::FrameGraphManager> manager(new Qt3DRender::Render::FrameGraphManager());
@@ -229,44 +229,41 @@ private Q_SLOTS:
backendFGNode->setRenderer(&renderer);
backendFGChild->setRenderer(&renderer);
- setIdInternal(backendFGNode, fgNode1Id);
+ setIdInternal(backendFGNode, frontendFGNode->id());
setIdInternal(backendFGChild, frontendFGChild->id());
- manager->appendNode(fgNode1Id, backendFGNode);
+ manager->appendNode(frontendFGNode->id(), backendFGNode);
manager->appendNode(frontendFGChild->id(), backendFGChild);
backendFGNode->setFrameGraphManager(manager.data());
backendFGChild->setFrameGraphManager(manager.data());
-
- // To geneate the type_info in the QNodePrivate of frontendFGChild
- Qt3DCore::QNodeCreatedChangeGenerator generator(frontendFGChild);
+ simulateInitializationSync(frontendFGNode, backendFGNode);
+ simulateInitializationSync(frontendFGChild, backendFGChild);
QCOMPARE(backendFGNode->childrenIds().size(), 0);
{
// WHEN
- renderer.clearDirtyBits(0);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(frontendFGChild->id());
- change->setPropertyName("parentFrameGraphUpdated");
- change->setValue(QVariant::fromValue(fgNode1Id));
- backendFGChild->sceneChangeEvent(change);
+ renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ frontendFGChild->setParent(frontendFGNode);
+ backendFGChild->syncFromFrontEnd(frontendFGChild, false);
// THEN
QCOMPARE(backendFGNode->childrenIds().size(), 1);
- QCOMPARE(backendFGChild->parentId(), fgNode1Id);
+ QCOMPARE(backendFGChild->parentId(), frontendFGNode->id());
+ QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
}
{
// WHEN
- renderer.clearDirtyBits(0);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(frontendFGChild->id());
- change->setPropertyName("parentFrameGraphUpdated");
- change->setValue(QVariant::fromValue(Qt3DCore::QNodeId()));
- backendFGChild->sceneChangeEvent(change);
+ renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ frontendFGChild->setParent(Q_NODE_NULLPTR);
+ backendFGChild->syncFromFrontEnd(frontendFGChild, false);
// THEN
QCOMPARE(backendFGNode->childrenIds().size(), 0);
QVERIFY(backendFGChild->parentId().isNull());
+ QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
}
}
diff --git a/tests/auto/render/geometry/tst_geometry.cpp b/tests/auto/render/geometry/tst_geometry.cpp
index 7e65d27aa..54a28e776 100644
--- a/tests/auto/render/geometry/tst_geometry.cpp
+++ b/tests/auto/render/geometry/tst_geometry.cpp
@@ -50,6 +50,7 @@ public:
class tst_RenderGeometry : public Qt3DCore::QBackendNodeTester
{
Q_OBJECT
+
private Q_SLOTS:
void checkPeerPropertyMirroring()
@@ -72,7 +73,7 @@ private Q_SLOTS:
renderGeometry.setRenderer(&renderer);
// WHEN
- simulateInitialization(&geometry, &renderGeometry);
+ simulateInitializationSync(&geometry, &renderGeometry);
// THEN
QCOMPARE(renderGeometry.peerId(), geometry.id());
@@ -80,8 +81,9 @@ private Q_SLOTS:
QCOMPARE(renderGeometry.attributes().count(), 4);
QCOMPARE(renderGeometry.boundingPositionAttribute(), attr1.id());
- for (int i = 0; i < 4; ++i)
- QCOMPARE(geometry.attributes().at(i)->id(), renderGeometry.attributes().at(i));
+ Qt3DCore::QNodeIdVector attribs = Qt3DCore::qIdsForNodes(geometry.attributes());
+ std::sort(std::begin(attribs), std::end(attribs));
+ QCOMPARE(attribs, renderGeometry.attributes());
}
void checkSetRendererDirtyOnInitialization()
@@ -97,7 +99,7 @@ private Q_SLOTS:
QCOMPARE(renderer.dirtyBits(), 0);
// WHEN
- simulateInitialization(&geometry, &renderGeometry);
+ simulateInitializationSync(&geometry, &renderGeometry);
// THEN
QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::GeometryDirty);
@@ -130,7 +132,7 @@ private Q_SLOTS:
geometry.addAttribute(&attr4);
// WHEN
- simulateInitialization(&geometry, &renderGeometry);
+ simulateInitializationSync(&geometry, &renderGeometry);
renderGeometry.cleanup();
// THEN
@@ -145,13 +147,15 @@ private Q_SLOTS:
TestRenderer renderer;
Qt3DRender::Render::Geometry renderGeometry;
renderGeometry.setRenderer(&renderer);
+ Qt3DRender::QGeometry geometry;
+
+ simulateInitializationSync(&geometry, &renderGeometry);
DummyAttribute attribute;
// WHEN
- const auto nodeAddedChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &attribute);
- nodeAddedChange->setPropertyName("attribute");
- renderGeometry.sceneChangeEvent(nodeAddedChange);
+ geometry.addAttribute(&attribute);
+ renderGeometry.syncFromFrontEnd(&geometry, false);
// THEN
QCOMPARE(renderGeometry.attributes().count(), 1);
@@ -163,9 +167,8 @@ private Q_SLOTS:
QVERIFY(!renderGeometry.isDirty());
// WHEN
- const auto nodeRemovedChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &attribute);
- nodeRemovedChange->setPropertyName("attribute");
- renderGeometry.sceneChangeEvent(nodeRemovedChange);
+ geometry.removeAttribute(&attribute);
+ renderGeometry.syncFromFrontEnd(&geometry, false);
// THEN
QCOMPARE(renderGeometry.attributes().count(), 0);
@@ -177,14 +180,11 @@ private Q_SLOTS:
QVERIFY(!renderGeometry.isDirty());
// WHEN
- const Qt3DCore::QNodeId boundingAttrId = Qt3DCore::QNodeId::createId();
- Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setValue(QVariant::fromValue(boundingAttrId));
- updateChange->setPropertyName("boundingVolumePositionAttribute");
- renderGeometry.sceneChangeEvent(updateChange);
+ geometry.setBoundingVolumePositionAttribute(&attribute);
+ renderGeometry.syncFromFrontEnd(&geometry, false);
// THEN
- QCOMPARE(renderGeometry.boundingPositionAttribute(), boundingAttrId);
+ QCOMPARE(renderGeometry.boundingPositionAttribute(), attribute.id());
QVERIFY(!renderGeometry.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
diff --git a/tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp b/tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp
index d07ec9914..db997a5e5 100644
--- a/tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp
+++ b/tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp
@@ -75,6 +75,7 @@ public:
class tst_RenderGeometryRenderer : public Qt3DCore::QBackendNodeTester
{
Q_OBJECT
+
private Q_SLOTS:
void checkPeerPropertyMirroring()
@@ -102,7 +103,7 @@ private Q_SLOTS:
// WHEN
renderGeometryRenderer.setRenderer(&renderer);
renderGeometryRenderer.setManager(&geometryRendererManager);
- simulateInitialization(&geometryRenderer, &renderGeometryRenderer);
+ simulateInitializationSync(&geometryRenderer, &renderGeometryRenderer);
// THEN
QCOMPARE(renderGeometryRenderer.peerId(), geometryRenderer.id());
@@ -163,7 +164,7 @@ private Q_SLOTS:
// WHEN
renderGeometryRenderer.setRenderer(&renderer);
renderGeometryRenderer.setManager(&geometryRendererManager);
- simulateInitialization(&geometryRenderer, &renderGeometryRenderer);
+ simulateInitializationSync(&geometryRenderer, &renderGeometryRenderer);
renderGeometryRenderer.cleanup();
// THEN
@@ -184,210 +185,185 @@ private Q_SLOTS:
void checkPropertyChanges()
{
// GIVEN
- Qt3DRender::Render::GeometryRenderer renderGeometryRenderer;
+ Qt3DRender::QGeometryRenderer frontEndRenderer;
+ Qt3DRender::Render::GeometryRenderer backEndRenderer;
TestRenderer renderer;
- renderGeometryRenderer.setRenderer(&renderer);
+ backEndRenderer.setRenderer(&renderer);
- QVERIFY(!renderGeometryRenderer.isDirty());
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setPropertyName("instanceCount");
- updateChange->setValue(2);
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setInstanceCount(2);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.instanceCount(), 2);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.instanceCount(), 2);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("vertexCount");
- updateChange->setValue(56);
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setVertexCount(56);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.vertexCount(), 56);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.vertexCount(), 56);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("indexOffset");
- updateChange->setValue(65);
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setIndexOffset(65);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.indexOffset(), 65);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.indexOffset(), 65);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("firstInstance");
- updateChange->setValue(82);
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setFirstInstance(82);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.firstInstance(), 82);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.firstInstance(), 82);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setPropertyName("indexBufferByteOffset");
- updateChange->setValue(96);
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setIndexBufferByteOffset(96);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.indexBufferByteOffset(), 96);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.indexBufferByteOffset(), 96);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("restartIndexValue");
- updateChange->setValue(46);
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setRestartIndexValue(46);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.restartIndexValue(), 46);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.restartIndexValue(), 46);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("primitiveRestartEnabled");
- updateChange->setValue(true);
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setPrimitiveRestartEnabled(true);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.primitiveRestartEnabled(), true);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.primitiveRestartEnabled(), true);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("primitiveType");
- updateChange->setValue(static_cast<int>(Qt3DRender::QGeometryRenderer::LineLoop));
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setPrimitiveType(Qt3DRender::QGeometryRenderer::LineLoop);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.primitiveType(), Qt3DRender::QGeometryRenderer::LineLoop);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.primitiveType(), Qt3DRender::QGeometryRenderer::LineLoop);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("geometryFactory");
Qt3DRender::QGeometryFactoryPtr factory(new TestFactory(1450));
- updateChange->setValue(QVariant::fromValue(factory));
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setGeometryFactory(factory);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.geometryFactory(), factory);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.geometryFactory(), factory);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN we set an identical factory again
- updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setPropertyName("geometryFactory");
Qt3DRender::QGeometryFactoryPtr factory2(new TestFactory(1450));
- updateChange->setValue(QVariant::fromValue(factory2));
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setGeometryFactory(factory2);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN not dirty and still uses original factory
- QCOMPARE(renderGeometryRenderer.geometryFactory(), factory);
- QVERIFY(!renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.geometryFactory(), factory);
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
DummyGeometry geometry;
const Qt3DCore::QNodeId geometryId = geometry.id();
- const auto nodeAddedChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- nodeAddedChange->setPropertyName("geometry");
- nodeAddedChange->setValue(QVariant::fromValue(geometryId));
- renderGeometryRenderer.sceneChangeEvent(nodeAddedChange);
+ frontEndRenderer.setGeometry(&geometry);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.geometryId(), geometryId);
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.geometryId(), geometryId);
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- const auto nodeRemovedChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- nodeRemovedChange->setPropertyName("geometry");
- nodeRemovedChange->setValue(QVariant::fromValue(Qt3DCore::QNodeId()));
- renderGeometryRenderer.sceneChangeEvent(nodeRemovedChange);
+ frontEndRenderer.setGeometry(nullptr);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.geometryId(), Qt3DCore::QNodeId());
- QVERIFY(renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.geometryId(), Qt3DCore::QNodeId());
+ QVERIFY(backEndRenderer.isDirty());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::GeometryDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderGeometryRenderer.unsetDirty();
- QVERIFY(!renderGeometryRenderer.isDirty());
+ backEndRenderer.unsetDirty();
+ QVERIFY(!backEndRenderer.isDirty());
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(true));
- updateChange->setPropertyName("enabled");
- renderGeometryRenderer.sceneChangeEvent(updateChange);
+ frontEndRenderer.setEnabled(true);
+ backEndRenderer.syncFromFrontEnd(&frontEndRenderer, false);
// THEN
- QCOMPARE(renderGeometryRenderer.isEnabled(), true);
- QVERIFY(!renderGeometryRenderer.isDirty());
+ QCOMPARE(backEndRenderer.isEnabled(), true);
+ QVERIFY(!backEndRenderer.isDirty());
}
void checkSetRendererDirtyOnInitialization()
@@ -405,7 +381,7 @@ private Q_SLOTS:
QCOMPARE(renderer.dirtyBits(), 0);
// WHEN
- simulateInitialization(&geometryRenderer, &renderGeometryRenderer);
+ simulateInitializationSync(&geometryRenderer, &renderGeometryRenderer);
// THEN
QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::GeometryDirty);
diff --git a/tests/auto/render/joint/tst_joint.cpp b/tests/auto/render/joint/tst_joint.cpp
index 13aa915d2..c08d36725 100644
--- a/tests/auto/render/joint/tst_joint.cpp
+++ b/tests/auto/render/joint/tst_joint.cpp
@@ -60,6 +60,7 @@ private Q_SLOTS:
Joint backendJoint;
backendJoint.setRenderer(&renderer);
backendJoint.setJointManager(nodeManagers.jointManager());
+ backendJoint.setSkeletonManager(nodeManagers.skeletonManager());
QJoint joint;
joint.setTranslation(QVector3D(1.0f, 2.0f, 3.0f));
@@ -77,7 +78,7 @@ private Q_SLOTS:
}
// WHEN
- simulateInitialization(&joint, &backendJoint);
+ simulateInitializationSync(&joint, &backendJoint);
// THEN
QCOMPARE(backendJoint.peerId(), joint.id());
@@ -100,6 +101,7 @@ private Q_SLOTS:
Joint backendJoint;
backendJoint.setRenderer(&renderer);
backendJoint.setJointManager(nodeManagers.jointManager());
+ backendJoint.setSkeletonManager(nodeManagers.skeletonManager());
// THEN
QVERIFY(backendJoint.peerId().isNull());
@@ -128,7 +130,7 @@ private Q_SLOTS:
}
// WHEN
- simulateInitialization(&joint, &backendJoint);
+ simulateInitializationSync(&joint, &backendJoint);
backendJoint.cleanup();
// THEN
@@ -235,6 +237,88 @@ private Q_SLOTS:
}
}
}
+
+ void checkDirectPropertyChanges()
+ {
+ // GIVEN
+ TestRenderer renderer;
+ NodeManagers nodeManagers;
+ renderer.setNodeManagers(&nodeManagers);
+ Joint backendJoint;
+ backendJoint.setRenderer(&renderer);
+ backendJoint.setJointManager(nodeManagers.jointManager());
+ backendJoint.setSkeletonManager(nodeManagers.skeletonManager());
+
+ QJoint joint;
+ simulateInitializationSync(&joint, &backendJoint);
+
+ // WHEN
+ joint.setEnabled(false);
+ backendJoint.syncFromFrontEnd(&joint, false);
+
+ // THEN
+ QCOMPARE(backendJoint.isEnabled(), false);
+
+ // WHEN
+ const QVector3D newTranslation = QVector3D(1.0f, 2.0f, 3.0f);
+ joint.setTranslation(newTranslation);
+ backendJoint.syncFromFrontEnd(&joint, false);
+
+ // THEN
+ QCOMPARE(backendJoint.translation(), newTranslation);
+
+ // WHEN
+ const QQuaternion newRotation = QQuaternion::fromAxisAndAngle(1.0f, 0.0f, 0.0f, 45.0f);
+ joint.setRotation(newRotation);
+ backendJoint.syncFromFrontEnd(&joint, false);
+
+ // THEN
+ QCOMPARE(backendJoint.rotation(), newRotation);
+
+ // WHEN
+ const QVector3D newScale = QVector3D(1.5f, 2.5f, 3.5f);
+ joint.setScale(newScale);
+ backendJoint.syncFromFrontEnd(&joint, false);
+
+ // THEN
+ QCOMPARE(backendJoint.scale(), newScale);
+
+ // WHEN
+ QMatrix4x4 newInverseBind;
+ newInverseBind.scale(5.4f);
+ joint.setInverseBindMatrix(newInverseBind);
+ backendJoint.syncFromFrontEnd(&joint, false);
+
+ // THEN
+ QCOMPARE(backendJoint.inverseBindMatrix(), newInverseBind);
+
+ // WHEN
+ QVector<QJoint *> childJoints;
+ for (int i = 0; i < 10; ++i) {
+ const auto childJoint = new QJoint();
+ joint.addChildJoint(childJoint);
+ childJoints.push_back(childJoint);
+ }
+ backendJoint.syncFromFrontEnd(&joint, false);
+
+ // THEN
+ for (int i = 0; i < childJoints.size(); ++i) {
+ QCOMPARE(backendJoint.childJointIds()[i], childJoints[i]->id());
+ }
+
+ for (int i = 0; i < 10; ++i) {
+ // WHEN
+ const auto childJoint = childJoints.takeLast();
+
+ joint.removeChildJoint(childJoint);
+ backendJoint.syncFromFrontEnd(&joint, false);
+
+ // THEN
+ for (int i = 0; i < childJoints.size(); ++i) {
+ QCOMPARE(backendJoint.childJointIds()[i], childJoints[i]->id());
+ }
+ }
+ }
};
QTEST_APPLESS_MAIN(tst_Joint)
diff --git a/tests/auto/render/layerfiltering/tst_layerfiltering.cpp b/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
index 8c72829e0..255ff5ea8 100644
--- a/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
+++ b/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
@@ -33,7 +33,6 @@
#include <Qt3DRender/private/entity_p.h>
#include <Qt3DRender/private/filterlayerentityjob_p.h>
#include <Qt3DRender/private/updatetreeenabledjob_p.h>
-#include <Qt3DRender/private/updateentityhierarchyjob_p.h>
#include <Qt3DRender/qlayer.h>
#include <Qt3DRender/qlayerfilter.h>
#include "testaspect.h"
@@ -634,10 +633,6 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::Entity *backendRoot = aspect->nodeManagers()->renderNodesManager()->getOrCreateResource(entitySubtree->id());
- Qt3DRender::Render::UpdateEntityHierarchyJob updateEntitiesJob;
- updateEntitiesJob.setManager(aspect->nodeManagers());
- updateEntitiesJob.run();
-
Qt3DRender::Render::UpdateTreeEnabledJob updateTreeEnabledJob;
updateTreeEnabledJob.setRoot(backendRoot);
updateTreeEnabledJob.setManagers(aspect->nodeManagers());
diff --git a/tests/auto/render/material/tst_material.cpp b/tests/auto/render/material/tst_material.cpp
index 9dfa0c246..e47eaea34 100644
--- a/tests/auto/render/material/tst_material.cpp
+++ b/tests/auto/render/material/tst_material.cpp
@@ -45,6 +45,7 @@ using namespace Qt3DRender::Render;
class tst_RenderMaterial : public Qt3DCore::QBackendNodeTester
{
Q_OBJECT
+
public:
tst_RenderMaterial() {}
@@ -117,7 +118,7 @@ void tst_RenderMaterial::shouldHavePropertiesMirroringFromItsPeer()
// GIVEN
backend.setRenderer(&renderer);
- simulateInitialization(frontendMaterial, &backend);
+ simulateInitializationSync(frontendMaterial, &backend);
// THEN
QVERIFY(backend.isEnabled() == frontendMaterial->isEnabled());
@@ -136,15 +137,17 @@ void tst_RenderMaterial::shouldHavePropertiesMirroringFromItsPeer()
void tst_RenderMaterial::shouldHandleParametersPropertyChange()
{
// GIVEN
- QScopedPointer<QParameter> parameter(new QParameter());
+ QParameter *parameter = new QParameter();
Material backend;
TestRenderer renderer;
backend.setRenderer(&renderer);
+ QMaterial material;
+ simulateInitializationSync(&material, &backend);
+
// WHEN
- const auto addChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), parameter.data());
- addChange->setPropertyName("parameter");
- backend.sceneChangeEvent(addChange);
+ material.addParameter(parameter);
+ backend.syncFromFrontEnd(&material, false);
// THEN
QCOMPARE(backend.parameters().count(), 1);
@@ -152,9 +155,8 @@ void tst_RenderMaterial::shouldHandleParametersPropertyChange()
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- const auto removeChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), parameter.data());
- removeChange->setPropertyName("parameter");
- backend.sceneChangeEvent(removeChange);
+ material.removeParameter(parameter);
+ backend.syncFromFrontEnd(&material, false);
// THEN
QVERIFY(backend.parameters().isEmpty());
@@ -167,24 +169,23 @@ void tst_RenderMaterial::shouldHandleEnablePropertyChange()
TestRenderer renderer;
backend.setRenderer(&renderer);
+ QMaterial material;
+ simulateInitializationSync(&material, &backend);
+
// WHEN
- auto updateChange = QPropertyUpdatedChangePtr::create(QNodeId());
- updateChange->setValue(true);
- updateChange->setPropertyName("enabled");
- backend.sceneChangeEvent(updateChange);
+ material.setEnabled(false);
+ backend.syncFromFrontEnd(&material, false);
// THEN
- QVERIFY(backend.isEnabled());
+ QVERIFY(!backend.isEnabled());
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- auto secondUpdateChange = QPropertyUpdatedChangePtr::create(QNodeId());
- secondUpdateChange->setValue(false);
- secondUpdateChange->setPropertyName("enabled");
- backend.sceneChangeEvent(secondUpdateChange);
+ material.setEnabled(true);
+ backend.syncFromFrontEnd(&material, false);
// THEN
- QVERIFY(!backend.isEnabled());
+ QVERIFY(backend.isEnabled());
}
@@ -195,15 +196,16 @@ void tst_RenderMaterial::shouldHandleEffectPropertyChange()
TestRenderer renderer;
backend.setRenderer(&renderer);
+ QMaterial material;
+ simulateInitializationSync(&material, &backend);
+
// WHEN
- QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- Qt3DCore::QNodeId effectId = Qt3DCore::QNodeId::createId();
- updateChange->setValue(QVariant::fromValue(effectId));
- updateChange->setPropertyName("effect");
- backend.sceneChangeEvent(updateChange);
+ QEffect effect;
+ material.setEffect(&effect);
+ backend.syncFromFrontEnd(&material, false);
// THEN
- QCOMPARE(backend.effect(), effectId);
+ QCOMPARE(backend.effect(), effect.id());
QVERIFY(renderer.dirtyBits() != 0);
}
diff --git a/tests/auto/render/materialparametergathererjob/tst_materialparametergathererjob.cpp b/tests/auto/render/materialparametergathererjob/tst_materialparametergathererjob.cpp
index c088cb84f..236faa8f0 100644
--- a/tests/auto/render/materialparametergathererjob/tst_materialparametergathererjob.cpp
+++ b/tests/auto/render/materialparametergathererjob/tst_materialparametergathererjob.cpp
@@ -76,7 +76,12 @@ public:
});
for (const auto node: nodes)
- d_func()->createBackendNode(node);
+ d_func()->createBackendNode({
+ node->id(),
+ Qt3DCore::QNodePrivate::get(node)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ node
+ });
const auto handles = nodeManagers()->techniqueManager()->activeHandles();
for (const auto &handle: handles) {
diff --git a/tests/auto/render/memorybarrier/tst_memorybarrier.cpp b/tests/auto/render/memorybarrier/tst_memorybarrier.cpp
index 71cf3f567..708659e4e 100644
--- a/tests/auto/render/memorybarrier/tst_memorybarrier.cpp
+++ b/tests/auto/render/memorybarrier/tst_memorybarrier.cpp
@@ -64,7 +64,7 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::MemoryBarrier backendMemoryBarrier;
backendMemoryBarrier.setRenderer(&renderer);
- simulateInitialization(&memoryBarrier, &backendMemoryBarrier);
+ simulateInitializationSync(&memoryBarrier, &backendMemoryBarrier);
// THEN
QCOMPARE(backendMemoryBarrier.isEnabled(), true);
@@ -78,7 +78,7 @@ private Q_SLOTS:
Qt3DRender::Render::MemoryBarrier backendMemoryBarrier;
backendMemoryBarrier.setRenderer(&renderer);
memoryBarrier.setEnabled(false);
- simulateInitialization(&memoryBarrier, &backendMemoryBarrier);
+ simulateInitializationSync(&memoryBarrier, &backendMemoryBarrier);
// THEN
QCOMPARE(backendMemoryBarrier.peerId(), memoryBarrier.id());
@@ -93,14 +93,15 @@ private Q_SLOTS:
Qt3DRender::Render::MemoryBarrier backendMemoryBarrier;
TestRenderer renderer;
backendMemoryBarrier.setRenderer(&renderer);
+ Qt3DRender::QMemoryBarrier memoryBarrier;
+
+ simulateInitializationSync(&memoryBarrier, &backendMemoryBarrier);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendMemoryBarrier.sceneChangeEvent(change);
+ memoryBarrier.setEnabled(newValue);
+ backendMemoryBarrier.syncFromFrontEnd(&memoryBarrier, false);
// THEN
QCOMPARE(backendMemoryBarrier.isEnabled(), newValue);
@@ -110,10 +111,8 @@ private Q_SLOTS:
{
// WHEN
const Qt3DRender::QMemoryBarrier::Operations newValue(Qt3DRender::QMemoryBarrier::AtomicCounter|Qt3DRender::QMemoryBarrier::ElementArray);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("waitOperations");
- change->setValue(QVariant::fromValue(newValue));
- backendMemoryBarrier.sceneChangeEvent(change);
+ memoryBarrier.setWaitOperations(newValue);
+ backendMemoryBarrier.syncFromFrontEnd(&memoryBarrier, false);
// THEN
QCOMPARE(backendMemoryBarrier.waitOperations(), newValue);
diff --git a/tests/auto/render/parameter/tst_parameter.cpp b/tests/auto/render/parameter/tst_parameter.cpp
index 3b83c1c82..44e7b7020 100644
--- a/tests/auto/render/parameter/tst_parameter.cpp
+++ b/tests/auto/render/parameter/tst_parameter.cpp
@@ -66,7 +66,7 @@ private Q_SLOTS:
// WHEN
backendParameter.setRenderer(&renderer);
- simulateInitialization(&parameter, &backendParameter);
+ simulateInitializationSync(&parameter, &backendParameter);
backendParameter.cleanup();
// THEN
@@ -89,7 +89,7 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::Parameter backendParameter;
backendParameter.setRenderer(&renderer);
- simulateInitialization(&parameter, &backendParameter);
+ simulateInitializationSync(&parameter, &backendParameter);
// THEN
QCOMPARE(backendParameter.isEnabled(), true);
@@ -105,7 +105,7 @@ private Q_SLOTS:
Qt3DRender::Render::Parameter backendParameter;
backendParameter.setRenderer(&renderer);
parameter.setEnabled(false);
- simulateInitialization(&parameter, &backendParameter);
+ simulateInitializationSync(&parameter, &backendParameter);
// THEN
QCOMPARE(backendParameter.peerId(), parameter.id());
@@ -121,13 +121,14 @@ private Q_SLOTS:
TestRenderer renderer;
backendParameter.setRenderer(&renderer);
+ Qt3DRender::QParameter parameter;
+ simulateInitializationSync(&parameter, &backendParameter);
+
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendParameter.sceneChangeEvent(change);
+ parameter.setEnabled(newValue);
+ backendParameter.syncFromFrontEnd(&parameter, false);
// THEN
QCOMPARE(backendParameter.isEnabled(), newValue);
@@ -137,10 +138,8 @@ private Q_SLOTS:
{
// WHEN
const QString newValue = QStringLiteral("C7");
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("name");
- change->setValue(QVariant::fromValue(newValue));
- backendParameter.sceneChangeEvent(change);
+ parameter.setName(newValue);
+ backendParameter.syncFromFrontEnd(&parameter, false);
// THEN
QCOMPARE(backendParameter.name(), newValue);
@@ -152,10 +151,8 @@ private Q_SLOTS:
// WHEN
const QVariant value = QVariant::fromValue(QVector3D(350.0f, 427.0f, 454.0f));
const Qt3DRender::Render::UniformValue newValue = Qt3DRender::Render::UniformValue::fromVariant(value);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("value");
- change->setValue(value);
- backendParameter.sceneChangeEvent(change);
+ parameter.setValue(value);
+ backendParameter.syncFromFrontEnd(&parameter, false);
// THEN
QCOMPARE(backendParameter.uniformValue(), newValue);
diff --git a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp
index a6b09d179..1fbdc4d04 100644
--- a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp
+++ b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp
@@ -48,7 +48,6 @@
#include <Qt3DRender/private/qrenderaspect_p.h>
#include <Qt3DRender/private/pickboundingvolumejob_p.h>
#include <Qt3DRender/private/pickboundingvolumeutils_p.h>
-#include <Qt3DRender/private/updateentityhierarchyjob_p.h>
#include <Qt3DRender/private/updatemeshtrianglelistjob_p.h>
#include <Qt3DRender/private/updateworldboundingvolumejob_p.h>
#include <Qt3DRender/private/updateworldtransformjob_p.h>
@@ -91,6 +90,23 @@ QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root)
return nodes;
}
+QVector<Qt3DCore::NodeTreeChange> nodeTreeChangesForNodes(const QVector<Qt3DCore::QNode *> nodes)
+{
+ QVector<Qt3DCore::NodeTreeChange> nodeTreeChanges;
+ nodeTreeChanges.reserve(nodes.size());
+
+ for (Qt3DCore::QNode *n : nodes) {
+ nodeTreeChanges.push_back({
+ n->id(),
+ Qt3DCore::QNodePrivate::get(n)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ n
+ });
+ }
+
+ return nodeTreeChanges;
+}
+
class TestAspect : public Qt3DRender::QRenderAspect
{
public:
@@ -101,7 +117,7 @@ public:
QRenderAspect::onRegistered();
const QVector<Qt3DCore::QNode *> nodes = getNodesForCreation(root);
- d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodes);
+ d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodeTreeChangesForNodes(nodes));
Render::Entity *rootEntity = nodeManagers()->lookupResource<Render::Entity, Render::EntityManager>(rootEntityId());
Q_ASSERT(rootEntity);
@@ -133,10 +149,6 @@ namespace {
void runRequiredJobs(Qt3DRender::TestAspect *test)
{
- Qt3DRender::Render::UpdateEntityHierarchyJob updateEntitiesJob;
- updateEntitiesJob.setManager(test->nodeManagers());
- updateEntitiesJob.run();
-
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
updateWorldTransform.setManagers(test->nodeManagers());
diff --git a/tests/auto/render/proximityfilter/tst_proximityfilter.cpp b/tests/auto/render/proximityfilter/tst_proximityfilter.cpp
index c1f1e8ec4..88059e31a 100644
--- a/tests/auto/render/proximityfilter/tst_proximityfilter.cpp
+++ b/tests/auto/render/proximityfilter/tst_proximityfilter.cpp
@@ -66,7 +66,7 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::ProximityFilter backendProximityFilter;
backendProximityFilter.setRenderer(&renderer);
- simulateInitialization(&proximityFilter, &backendProximityFilter);
+ simulateInitializationSync(&proximityFilter, &backendProximityFilter);
// THEN
QCOMPARE(backendProximityFilter.isEnabled(), true);
@@ -81,7 +81,7 @@ private Q_SLOTS:
Qt3DRender::Render::ProximityFilter backendProximityFilter;
backendProximityFilter.setRenderer(&renderer);
proximityFilter.setEnabled(false);
- simulateInitialization(&proximityFilter, &backendProximityFilter);
+ simulateInitializationSync(&proximityFilter, &backendProximityFilter);
// THEN
QCOMPARE(backendProximityFilter.peerId(), proximityFilter.id());
@@ -93,17 +93,17 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DRender::QProximityFilter proximityFilter;
Qt3DRender::Render::ProximityFilter backendProximityFilter;
TestRenderer renderer;
backendProximityFilter.setRenderer(&renderer);
+ simulateInitializationSync(&proximityFilter, &backendProximityFilter);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendProximityFilter.sceneChangeEvent(change);
+ proximityFilter.setEnabled(newValue);
+ backendProximityFilter.syncFromFrontEnd(&proximityFilter, &backendProximityFilter);
// THEN
QCOMPARE(backendProximityFilter.isEnabled(), newValue);
@@ -113,10 +113,9 @@ private Q_SLOTS:
{
// WHEN
const float newValue = 383.0f;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("distanceThreshold");
- change->setValue(QVariant::fromValue(newValue));
- backendProximityFilter.sceneChangeEvent(change);
+ proximityFilter.setDistanceThreshold(newValue);
+ backendProximityFilter.syncFromFrontEnd(&proximityFilter, &backendProximityFilter);
+
// THEN
QCOMPARE(backendProximityFilter.distanceThreshold(), newValue);
@@ -125,14 +124,12 @@ private Q_SLOTS:
}
{
// WHEN
- const Qt3DCore::QNodeId newValue = Qt3DCore::QNodeId::createId();
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("entity");
- change->setValue(QVariant::fromValue(newValue));
- backendProximityFilter.sceneChangeEvent(change);
+ Qt3DCore::QEntity e;
+ proximityFilter.setEntity(&e);
+ backendProximityFilter.syncFromFrontEnd(&proximityFilter, &backendProximityFilter);
// THEN
- QCOMPARE(backendProximityFilter.entityId(), newValue);
+ QCOMPARE(backendProximityFilter.entityId(), e.id());
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
}
diff --git a/tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp b/tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp
index c8d862b2e..07adf12b5 100644
--- a/tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp
+++ b/tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp
@@ -247,10 +247,6 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::Entity *backendRoot = aspect->nodeManagers()->renderNodesManager()->getOrCreateResource(entitySubtree->id());
- Qt3DRender::Render::UpdateEntityHierarchyJob updateEntitiesJob;
- updateEntitiesJob.setManager(aspect->nodeManagers());
- updateEntitiesJob.run();
-
Qt3DRender::Render::UpdateTreeEnabledJob updateTreeEnabledJob;
updateTreeEnabledJob.setRoot(backendRoot);
updateTreeEnabledJob.setManagers(aspect->nodeManagers());
diff --git a/tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp b/tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp
index 04364e2d9..6db8d20f5 100644
--- a/tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp
+++ b/tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp
@@ -37,6 +37,7 @@
#include <Qt3DCore/qpropertynodeaddedchange.h>
#include <Qt3DCore/qpropertynoderemovedchange.h>
#include <Qt3DCore/private/qnodecreatedchangegenerator_p.h>
+#include <Qt3DCore/private/qnodevisitor_p.h>
#include <Qt3DCore/qnodecreatedchange.h>
#include "testpostmanarbiter.h"
@@ -1099,28 +1100,6 @@ private Q_SLOTS:
{
{
// GIVEN
- FakeTexture abstractTexture;
- Qt3DRender::QTextureDataUpdate update;
-
- // WHEN
- abstractTexture.updateData(update);
-
- // THEN (no arbiter -> should be stored in the initial changes)
- Qt3DCore::QNodeCreatedChangeGenerator creationChangeGenerator(&abstractTexture);
- const QVector<Qt3DCore::QNodeCreatedChangeBasePtr> creationChanges = creationChangeGenerator.creationChanges();
-
- QCOMPARE(creationChanges.size(), 1);
- const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<Qt3DRender::QAbstractTextureData>>(creationChanges.first());
-
- QVERIFY(typedChange);
- const Qt3DRender::QAbstractTextureData data = typedChange->data;
-
- QCOMPARE(data.initialDataUpdates.size(), 1);
- QVERIFY(data.initialDataUpdates.contains(update));
- }
-
- {
- // GIVEN
TestArbiter arbiter;
FakeTexture abstractTexture;
Qt3DRender::QTextureDataUpdate update;
@@ -1131,23 +1110,10 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN (arbiter -> should not be stored in the initial changes but only send as a property change)
- Qt3DCore::QNodeCreatedChangeGenerator creationChangeGenerator(&abstractTexture);
- const QVector<Qt3DCore::QNodeCreatedChangeBasePtr> creationChanges = creationChangeGenerator.creationChanges();
-
- QCOMPARE(creationChanges.size(), 1);
- const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<Qt3DRender::QAbstractTextureData>>(creationChanges.first());
-
- QVERIFY(typedChange);
- const Qt3DRender::QAbstractTextureData data = typedChange->data;
-
- QCOMPARE(data.initialDataUpdates.size(), 0);
-
- // THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "updateData");
- QCOMPARE(change->value().value<Qt3DRender::QTextureDataUpdate>(), update);
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
+ auto d = static_cast<Qt3DRender::QAbstractTexturePrivate*>(Qt3DRender::QAbstractTexturePrivate::get(&abstractTexture));
+ QCOMPARE(d->m_pendingDataUpdates.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &abstractTexture);
}
}
diff --git a/tests/auto/render/qbuffer/tst_qbuffer.cpp b/tests/auto/render/qbuffer/tst_qbuffer.cpp
index 8a9a25408..94c0a49cb 100644
--- a/tests/auto/render/qbuffer/tst_qbuffer.cpp
+++ b/tests/auto/render/qbuffer/tst_qbuffer.cpp
@@ -154,12 +154,10 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "dataGenerator");
- QCOMPARE(change->value().value<Qt3DRender::QBufferDataGeneratorPtr>(), functor);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), buffer.data());
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
buffer->setSyncData(true);
@@ -176,13 +174,8 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- QCOMPARE(buffer->data(), QByteArrayLiteral("ZL1"));
- change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "updateData");
- Qt3DRender::QBufferUpdate updateData = change->value().value<Qt3DRender::QBufferUpdate>();
- QCOMPARE(updateData.offset, 1);
- QCOMPARE(updateData.data, QByteArrayLiteral("L1"));
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), buffer.data());
}
};
diff --git a/tests/auto/render/qcamera/tst_qcamera.cpp b/tests/auto/render/qcamera/tst_qcamera.cpp
index 214305e53..229dff565 100644
--- a/tests/auto/render/qcamera/tst_qcamera.cpp
+++ b/tests/auto/render/qcamera/tst_qcamera.cpp
@@ -34,7 +34,6 @@
#include <qbackendnodetester.h>
#include <Qt3DCore/QEntity>
-#include <Qt3DRender/private/updateentityhierarchyjob_p.h>
#include <Qt3DCore/private/qaspectjobmanager_p.h>
#include <Qt3DCore/private/qnodevisitor_p.h>
#include <Qt3DCore/qpropertyupdatedchange.h>
@@ -80,6 +79,23 @@ QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root)
return nodes;
}
+QVector<Qt3DCore::NodeTreeChange> nodeTreeChangesForNodes(const QVector<Qt3DCore::QNode *> nodes)
+{
+ QVector<Qt3DCore::NodeTreeChange> nodeTreeChanges;
+ nodeTreeChanges.reserve(nodes.size());
+
+ for (Qt3DCore::QNode *n : nodes) {
+ nodeTreeChanges.push_back({
+ n->id(),
+ Qt3DCore::QNodePrivate::get(n)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ n
+ });
+ }
+
+ return nodeTreeChanges;
+}
+
class TestAspect : public Qt3DRender::QRenderAspect
{
public:
@@ -90,7 +106,7 @@ public:
QRenderAspect::onRegistered();
const QVector<Qt3DCore::QNode *> nodes = getNodesForCreation(root);
- d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodes);
+ d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodeTreeChangesForNodes(nodes));
Render::Entity *rootEntity = nodeManagers()->lookupResource<Render::Entity, Render::EntityManager>(rootEntityId());
Q_ASSERT(rootEntity);
@@ -124,10 +140,6 @@ namespace {
void runRequiredJobs(Qt3DRender::TestAspect *test)
{
- Qt3DRender::Render::UpdateEntityHierarchyJob updateEntitiesJob;
- updateEntitiesJob.setManager(test->nodeManagers());
- updateEntitiesJob.run();
-
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
updateWorldTransform.setManagers(test->nodeManagers());
diff --git a/tests/auto/render/qeffect/tst_qeffect.cpp b/tests/auto/render/qeffect/tst_qeffect.cpp
index 7449fee2c..955b58a1e 100644
--- a/tests/auto/render/qeffect/tst_qeffect.cpp
+++ b/tests/auto/render/qeffect/tst_qeffect.cpp
@@ -217,13 +217,8 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->addedNodeId(), parameter.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QVERIFY(effect.parameters().contains(&parameter));
}
{
@@ -232,13 +227,8 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->removedNodeId(), parameter.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QVERIFY(!effect.parameters().contains(&parameter));
}
}
@@ -257,13 +247,10 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "technique");
- QCOMPARE(change->addedNodeId(), technique.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &effect);
+ arbiter.dirtyNodes.clear();
}
{
@@ -272,13 +259,10 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(change->propertyName(), "technique");
- QCOMPARE(change->removedNodeId(), technique.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &effect);
+ arbiter.dirtyNodes.clear();
}
}
diff --git a/tests/auto/render/qgeometry/tst_qgeometry.cpp b/tests/auto/render/qgeometry/tst_qgeometry.cpp
index 55b7e752c..b82c53de1 100644
--- a/tests/auto/render/qgeometry/tst_qgeometry.cpp
+++ b/tests/auto/render/qgeometry/tst_qgeometry.cpp
@@ -130,13 +130,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeAddedChangePtr nodeAddedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(nodeAddedChange->propertyName(), "attribute");
- QCOMPARE(nodeAddedChange->addedNodeId(), attr.id());
- QCOMPARE(nodeAddedChange->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), geometry.data());
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
geometry->addAttribute(&attr);
@@ -144,17 +142,16 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
// WHEN
geometry->removeAttribute(&attr);
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeRemovedChangePtr nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(nodeRemovedChange->propertyName(), "attribute");
- QCOMPARE(nodeRemovedChange->removedNodeId(), attr.id());
- QCOMPARE(nodeRemovedChange->type(), Qt3DCore::PropertyValueRemoved);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), geometry.data());
arbiter.events.clear();
}
diff --git a/tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp b/tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp
index 15cf98de0..b03d48663 100644
--- a/tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp
+++ b/tests/auto/render/qgeometryrenderer/tst_qgeometryrenderer.cpp
@@ -262,13 +262,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "geometryFactory");
- QCOMPARE(change->value().value<Qt3DRender::QGeometryFactoryPtr>(), factory);
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), geometryRenderer.data());
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
Qt3DRender::QGeometry geom;
diff --git a/tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp b/tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp
index c7686bae2..4bc766b58 100644
--- a/tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp
+++ b/tests/auto/render/qlayerfilter/tst_qlayerfilter.cpp
@@ -119,14 +119,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto addChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(addChange->propertyName(), "layer");
- QCOMPARE(addChange->subjectId(), layerFilter->id());
- QCOMPARE(addChange->addedNodeId(), layerFilter->layers().at(0)->id());
- QCOMPARE(addChange->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(layerFilter.data()));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
layer = new Qt3DRender::QLayer(layerFilter.data());
@@ -135,14 +132,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- addChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(addChange->propertyName(), "layer");
- QCOMPARE(addChange->subjectId(), layerFilter->id());
- QCOMPARE(addChange->addedNodeId(), layerFilter->layers().at(1)->id());
- QCOMPARE(addChange->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(layerFilter.data()));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
layer = layerFilter->layers().at(0);
@@ -150,14 +144,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto removeChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(removeChange->propertyName(), "layer");
- QCOMPARE(removeChange->subjectId(), layerFilter->id());
- QCOMPARE(removeChange->removedNodeId(), layer->id());
- QCOMPARE(removeChange->type(), Qt3DCore::PropertyValueRemoved);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(layerFilter.data()));
+
+ arbiter.dirtyNodes.clear();
}
void checkLayerBookkeeping()
diff --git a/tests/auto/render/qmaterial/tst_qmaterial.cpp b/tests/auto/render/qmaterial/tst_qmaterial.cpp
index 5b24c6127..501d50556 100644
--- a/tests/auto/render/qmaterial/tst_qmaterial.cpp
+++ b/tests/auto/render/qmaterial/tst_qmaterial.cpp
@@ -295,13 +295,9 @@ private Q_SLOTS:
QCOMPARE(param->parent(), material);
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeAddedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->addedNodeId(), param->id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(material->parameters().contains(param));
// WHEN (add parameter to effect)
param = new Qt3DRender::QParameter("testParamEffect", QVariant::fromValue(383.0f));
@@ -309,13 +305,9 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->addedNodeId(), param->id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 2);
+ QVERIFY(material->effect()->parameters().contains(param));
// WHEN (add parameter to technique)
param = new Qt3DRender::QParameter("testParamTechnique", QVariant::fromValue(383.0f));
@@ -323,13 +315,10 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->addedNodeId(), param->id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 3);
+ QVERIFY(material->m_technique->parameters().contains(param));
- arbiter.events.clear();
// WHEN (add parameter to renderpass)
param = new Qt3DRender::QParameter("testParamRenderPass", QVariant::fromValue(383.0f));
@@ -337,13 +326,9 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->addedNodeId(), param->id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 4);
+ QVERIFY(material->m_renderPass->parameters().contains(param));
}
void checkShaderProgramUpdates()
diff --git a/tests/auto/render/qmesh/tst_qmesh.cpp b/tests/auto/render/qmesh/tst_qmesh.cpp
index fbc566395..49679e29e 100644
--- a/tests/auto/render/qmesh/tst_qmesh.cpp
+++ b/tests/auto/render/qmesh/tst_qmesh.cpp
@@ -186,18 +186,10 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.last().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "geometryFactory");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
-
- Qt3DRender::QGeometryFactoryPtr factory = change->value().value<Qt3DRender::QGeometryFactoryPtr>();
- QSharedPointer<Qt3DRender::MeshLoaderFunctor> meshFunctor = qSharedPointerCast<Qt3DRender::MeshLoaderFunctor>(factory);
- QVERIFY(meshFunctor != nullptr);
- QCOMPARE(meshFunctor->mesh(), mesh.id());
- QCOMPARE(meshFunctor->sourcePath(), mesh.source());
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &mesh);
+
+ arbiter.dirtyNodes.clear();
}
{
@@ -206,7 +198,7 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
}
}
@@ -231,18 +223,10 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "geometryFactory");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
-
- Qt3DRender::QGeometryFactoryPtr factory = change->value().value<Qt3DRender::QGeometryFactoryPtr>();
- QSharedPointer<Qt3DRender::MeshLoaderFunctor> meshFunctor = qSharedPointerCast<Qt3DRender::MeshLoaderFunctor>(factory);
- QVERIFY(meshFunctor != nullptr);
- QCOMPARE(meshFunctor->mesh(), mesh.id());
- QCOMPARE(meshFunctor->meshName(), mesh.meshName());
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &mesh);
+
+ arbiter.dirtyNodes.clear();
}
{
@@ -251,7 +235,7 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
}
}
diff --git a/tests/auto/render/qrendercapture/tst_qrendercapture.cpp b/tests/auto/render/qrendercapture/tst_qrendercapture.cpp
index 2fab1e837..b9cb2230f 100644
--- a/tests/auto/render/qrendercapture/tst_qrendercapture.cpp
+++ b/tests/auto/render/qrendercapture/tst_qrendercapture.cpp
@@ -72,17 +72,11 @@ private Q_SLOTS:
QScopedPointer<Qt3DRender::QRenderCaptureReply> reply(renderCapture->requestCapture(QRect(10, 15, 20, 50)));
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "renderCaptureRequest");
- QCOMPARE(change->subjectId(),renderCapture->id());
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- QVERIFY(change->value().canConvert<Qt3DRender::QRenderCaptureRequest>());
- const Qt3DRender::QRenderCaptureRequest request = change->value().value<Qt3DRender::QRenderCaptureRequest>();
- QCOMPARE(request.captureId, 1);
- QCOMPARE(request.rect, QRect(10, 15, 20, 50));
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), renderCapture.data());
+
+ arbiter.dirtyNodes.clear();
}
void checkRenderCaptureReply()
diff --git a/tests/auto/render/qrenderpass/tst_qrenderpass.cpp b/tests/auto/render/qrenderpass/tst_qrenderpass.cpp
index 38b66de94..ce9c6581b 100644
--- a/tests/auto/render/qrenderpass/tst_qrenderpass.cpp
+++ b/tests/auto/render/qrenderpass/tst_qrenderpass.cpp
@@ -338,11 +338,9 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "filterKeys");
- QCOMPARE(change->addedNodeId(), filterKey.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &renderPass);
arbiter.events.clear();
}
@@ -353,11 +351,9 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(change->propertyName(), "filterKeys");
- QCOMPARE(change->removedNodeId(), filterKey.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &renderPass);
arbiter.events.clear();
}
@@ -378,11 +374,9 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "renderState");
- QCOMPARE(change->addedNodeId(), renderState.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &renderPass);
arbiter.events.clear();
}
@@ -393,11 +387,9 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(change->propertyName(), "renderState");
- QCOMPARE(change->removedNodeId(), renderState.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &renderPass);
arbiter.events.clear();
}
@@ -418,11 +410,9 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->addedNodeId(), parameter.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &renderPass);
arbiter.events.clear();
}
@@ -433,11 +423,9 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->removedNodeId(), parameter.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &renderPass);
arbiter.events.clear();
}
diff --git a/tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp b/tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp
index 23544c0c6..f08846ba3 100644
--- a/tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp
+++ b/tests/auto/render/qrenderpassfilter/tst_qrenderpassfilter.cpp
@@ -154,14 +154,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeAddedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->subjectId(),renderPassFilter->id());
- QCOMPARE(change->addedNodeId(), param1->id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(renderPassFilter.data()));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
renderPassFilter->addParameter(param1);
@@ -169,20 +166,18 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
// WHEN
renderPassFilter->removeParameter(param1);
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeRemovedChangePtr nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(nodeRemovedChange->propertyName(), "parameter");
- QCOMPARE(nodeRemovedChange->subjectId(), renderPassFilter->id());
- QCOMPARE(nodeRemovedChange->removedNodeId(), param1->id());
- QCOMPARE(nodeRemovedChange->type(), Qt3DCore::PropertyValueRemoved);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(renderPassFilter.data()));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
Qt3DRender::QFilterKey *filterKey1 = new Qt3DRender::QFilterKey();
@@ -190,14 +185,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "match");
- QCOMPARE(change->subjectId(),renderPassFilter->id());
- QCOMPARE(change->addedNodeId(), filterKey1->id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(renderPassFilter.data()));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
renderPassFilter->addMatch(filterKey1);
@@ -205,20 +197,18 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
// WHEN
renderPassFilter->removeMatch(filterKey1);
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(nodeRemovedChange->propertyName(), "match");
- QCOMPARE(nodeRemovedChange->subjectId(), renderPassFilter->id());
- QCOMPARE(nodeRemovedChange->removedNodeId(), filterKey1->id());
- QCOMPARE(nodeRemovedChange->type(), Qt3DCore::PropertyValueRemoved);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(renderPassFilter.data()));
+
+ arbiter.dirtyNodes.clear();
}
void checkParameterBookkeeping()
diff --git a/tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp b/tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp
index 6b200d19d..9eb97ce93 100644
--- a/tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp
+++ b/tests/auto/render/qrenderstateset/tst_qrenderstateset.cpp
@@ -140,14 +140,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeAddedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "renderState");
- QCOMPARE(change->subjectId(), stateSet->id());
- QCOMPARE(change->addedNodeId(), state1->id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(stateSet.data()));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
stateSet->addRenderState(state1);
@@ -155,20 +152,17 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
-
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
// WHEN
stateSet->removeRenderState(state1);
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeRemovedChangePtr nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(nodeRemovedChange->propertyName(), "renderState");
- QCOMPARE(nodeRemovedChange->subjectId(), stateSet->id());
- QCOMPARE(nodeRemovedChange->removedNodeId(), state1->id());
- QCOMPARE(nodeRemovedChange->type(), Qt3DCore::PropertyValueRemoved);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(stateSet.data()));
+
+ arbiter.dirtyNodes.clear();
}
void checkRenderStateBookkeeping()
diff --git a/tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp b/tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp
index f525f1254..7bacc3b6d 100644
--- a/tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp
+++ b/tests/auto/render/qrendertargetselector/tst_qrendertargetselector.cpp
@@ -149,14 +149,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "outputs");
- QCOMPARE(change->subjectId(), renderTargetSelector->id());
- QCOMPARE(change->value().value<QVector<Qt3DRender::QRenderTargetOutput::AttachmentPoint> >(), outputs);
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), renderTargetSelector.data());
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
// WHEN
renderTargetSelector->setOutputs(outputs);
@@ -164,20 +161,18 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
// WHEN
renderTargetSelector->setOutputs(QVector<Qt3DRender::QRenderTargetOutput::AttachmentPoint>());
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "outputs");
- QCOMPARE(change->subjectId(), renderTargetSelector->id());
- QCOMPARE(change->value().value<QVector<Qt3DRender::QRenderTargetOutput::AttachmentPoint> >(), QVector<Qt3DRender::QRenderTargetOutput::AttachmentPoint>());
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), renderTargetSelector.data());
+
+ arbiter.dirtyNodes.clear();
}
void checkRenderTargetBookkeeping()
diff --git a/tests/auto/render/qshaderprogram/tst_qshaderprogram.cpp b/tests/auto/render/qshaderprogram/tst_qshaderprogram.cpp
index 7865a5f65..a261d0860 100644
--- a/tests/auto/render/qshaderprogram/tst_qshaderprogram.cpp
+++ b/tests/auto/render/qshaderprogram/tst_qshaderprogram.cpp
@@ -470,6 +470,9 @@ private Q_SLOTS:
QCOMPARE(spy.count(), 0);
QCOMPARE(arbiter.events.size(), 0);
QCOMPARE(log(), logValue);
+
+ // Cleanup
+ Qt3DCore::QNodePrivate::get(this)->setArbiter(nullptr);
}
void checkStatusPropertyUpdate()
@@ -503,6 +506,9 @@ private Q_SLOTS:
QCOMPARE(spy.count(), 0);
QCOMPARE(arbiter.events.size(), 0);
QCOMPARE(status(), newStatus);
+
+ // Cleanup
+ Qt3DCore::QNodePrivate::get(this)->setArbiter(nullptr);
}
void checkIncludes()
diff --git a/tests/auto/render/qtechnique/tst_qtechnique.cpp b/tests/auto/render/qtechnique/tst_qtechnique.cpp
index 1026dddc0..1e7e4b440 100644
--- a/tests/auto/render/qtechnique/tst_qtechnique.cpp
+++ b/tests/auto/render/qtechnique/tst_qtechnique.cpp
@@ -329,28 +329,21 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "pass");
- QCOMPARE(change->addedNodeId(), pass.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
}
-
{
// WHEN
technique.removeRenderPass(&pass);
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(change->propertyName(), "pass");
- QCOMPARE(change->removedNodeId(), pass.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
}
}
@@ -368,13 +361,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->addedNodeId(), parameter.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
}
{
@@ -383,13 +374,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(change->propertyName(), "parameter");
- QCOMPARE(change->removedNodeId(), parameter.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
}
}
@@ -407,13 +396,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(change->propertyName(), "filterKeys");
- QCOMPARE(change->addedNodeId(), filterKey.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
}
{
@@ -422,13 +409,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(change->propertyName(), "filterKeys");
- QCOMPARE(change->removedNodeId(), filterKey.id());
- QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
}
}
@@ -445,14 +430,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "graphicsApiFilterData");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- Qt3DRender::GraphicsApiFilterData data = change->value().value<Qt3DRender::GraphicsApiFilterData>();
- QCOMPARE(data.m_major, 4);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
+
+ arbiter.dirtyNodes.clear();
}
{
// WHEN
@@ -460,14 +442,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "graphicsApiFilterData");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- Qt3DRender::GraphicsApiFilterData data = change->value().value<Qt3DRender::GraphicsApiFilterData>();
- QCOMPARE(data.m_minor, 5);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
+
+ arbiter.dirtyNodes.clear();
}
{
// WHEN
@@ -475,14 +454,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "graphicsApiFilterData");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- Qt3DRender::GraphicsApiFilterData data = change->value().value<Qt3DRender::GraphicsApiFilterData>();
- QCOMPARE(data.m_vendor, QStringLiteral("AMD"));
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
+
+ arbiter.dirtyNodes.clear();
}
{
// WHEN
@@ -490,14 +466,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "graphicsApiFilterData");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
- Qt3DRender::GraphicsApiFilterData data = change->value().value<Qt3DRender::GraphicsApiFilterData>();
- QCOMPARE(data.m_profile, Qt3DRender::QGraphicsApiFilter::CompatibilityProfile);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QVERIFY(arbiter.dirtyNodes.contains(&technique));
+
+ arbiter.dirtyNodes.clear();
}
}
};
diff --git a/tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp b/tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp
index 4f6daae8c..648fbd5ce 100644
--- a/tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp
+++ b/tests/auto/render/qtechniquefilter/tst_qtechniquefilter.cpp
@@ -159,14 +159,11 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeAddedChangePtr nodeAddedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(nodeAddedChange->propertyName(), "parameter");
- QCOMPARE(nodeAddedChange->subjectId(),techniqueFilter->id());
- QCOMPARE(nodeAddedChange->addedNodeId(), param1->id());
- QCOMPARE(nodeAddedChange->type(), Qt3DCore::PropertyValueAdded);
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), techniqueFilter.data());
+ arbiter.dirtyNodes.clear();
- arbiter.events.clear();
// WHEN
techniqueFilter->addParameter(param1);
@@ -174,20 +171,17 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
// WHEN
techniqueFilter->removeParameter(param1);
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- Qt3DCore::QPropertyNodeRemovedChangePtr nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(nodeRemovedChange->propertyName(), "parameter");
- QCOMPARE(nodeRemovedChange->subjectId(), techniqueFilter->id());
- QCOMPARE(nodeRemovedChange->removedNodeId(), param1->id());
- QCOMPARE(nodeRemovedChange->type(), Qt3DCore::PropertyValueRemoved);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), techniqueFilter.data());
+ arbiter.dirtyNodes.clear();
// WHEN
Qt3DRender::QFilterKey *filterKey1 = new Qt3DRender::QFilterKey();
@@ -195,14 +189,10 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- nodeAddedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>();
- QCOMPARE(nodeAddedChange->propertyName(), "matchAll");
- QCOMPARE(nodeAddedChange->subjectId(),techniqueFilter->id());
- QCOMPARE(nodeAddedChange->addedNodeId(), filterKey1->id());
- QCOMPARE(nodeAddedChange->type(), Qt3DCore::PropertyValueAdded);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), techniqueFilter.data());
+ arbiter.dirtyNodes.clear();
// WHEN
techniqueFilter->addMatch(filterKey1);
@@ -210,20 +200,17 @@ private Q_SLOTS:
// THEN
QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
// WHEN
techniqueFilter->removeMatch(filterKey1);
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>();
- QCOMPARE(nodeRemovedChange->propertyName(), "matchAll");
- QCOMPARE(nodeRemovedChange->subjectId(), techniqueFilter->id());
- QCOMPARE(nodeRemovedChange->removedNodeId(), filterKey1->id());
- QCOMPARE(nodeRemovedChange->type(), Qt3DCore::PropertyValueRemoved);
-
- arbiter.events.clear();
+ QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), techniqueFilter.data());
+ arbiter.dirtyNodes.clear();
}
void checkParameterBookkeeping()
diff --git a/tests/auto/render/qtextureimage/tst_qtextureimage.cpp b/tests/auto/render/qtextureimage/tst_qtextureimage.cpp
index 224784011..8ea656c28 100644
--- a/tests/auto/render/qtextureimage/tst_qtextureimage.cpp
+++ b/tests/auto/render/qtextureimage/tst_qtextureimage.cpp
@@ -174,14 +174,8 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "dataGenerator");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
-
- const auto generator = qSharedPointerCast<Qt3DRender::QImageTextureDataFunctor>(change->value().value<Qt3DRender::QTextureImageDataGeneratorPtr>());
- QVERIFY(generator);
- QCOMPARE(generator->url(), textureImage.source());
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &textureImage);
arbiter.events.clear();
}
@@ -210,14 +204,8 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "dataGenerator");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
-
- const auto generator = qSharedPointerCast<Qt3DRender::QImageTextureDataFunctor>(change->value().value<Qt3DRender::QTextureImageDataGeneratorPtr>());
- QVERIFY(generator);
- QCOMPARE(generator->isMirrored(), textureImage.isMirrored());
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &textureImage);
arbiter.events.clear();
}
diff --git a/tests/auto/render/qtextureloader/tst_qtextureloader.cpp b/tests/auto/render/qtextureloader/tst_qtextureloader.cpp
index 56ad55adf..eebbf5d41 100644
--- a/tests/auto/render/qtextureloader/tst_qtextureloader.cpp
+++ b/tests/auto/render/qtextureloader/tst_qtextureloader.cpp
@@ -168,16 +168,14 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- const auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "generator");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &textureLoader);
- const auto generator = qSharedPointerCast<Qt3DRender::QTextureFromSourceGenerator>(change->value().value<Qt3DRender::QTextureGeneratorPtr>());
+ Qt3DRender::QAbstractTexturePrivate *d = dynamic_cast<Qt3DRender::QAbstractTexturePrivate *>(Qt3DRender::QAbstractTexturePrivate::get(&textureLoader));
+ const auto generator = qSharedPointerCast<Qt3DRender::QTextureFromSourceGenerator>(d->dataFunctor());
QVERIFY(generator);
QCOMPARE(generator->url(), QUrl(QStringLiteral("Gary")));
-
arbiter.events.clear();
}
@@ -205,16 +203,15 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 1);
- const auto change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
- QCOMPARE(change->propertyName(), "generator");
- QCOMPARE(change->type(), Qt3DCore::PropertyUpdated);
+ QCOMPARE(arbiter.dirtyNodes.size(), 1);
+ QCOMPARE(arbiter.dirtyNodes.front(), &textureLoader);
- const auto generator = qSharedPointerCast<Qt3DRender::QTextureFromSourceGenerator>(change->value().value<Qt3DRender::QTextureGeneratorPtr>());
+ Qt3DRender::QAbstractTexturePrivate *d = dynamic_cast<Qt3DRender::QAbstractTexturePrivate *>(Qt3DRender::QAbstractTexturePrivate::get(&textureLoader));
+ const auto generator = qSharedPointerCast<Qt3DRender::QTextureFromSourceGenerator>(d->dataFunctor());
QVERIFY(generator);
QCOMPARE(generator->isMirrored(), false);
- arbiter.events.clear();
+ arbiter.dirtyNodes.clear();
}
{
@@ -223,7 +220,7 @@ private Q_SLOTS:
QCoreApplication::processEvents();
// THEN
- QCOMPARE(arbiter.events.size(), 0);
+ QCOMPARE(arbiter.dirtyNodes.size(), 0);
}
}
diff --git a/tests/auto/render/raycastingjob/tst_raycastingjob.cpp b/tests/auto/render/raycastingjob/tst_raycastingjob.cpp
index d44596abc..e45ec704e 100644
--- a/tests/auto/render/raycastingjob/tst_raycastingjob.cpp
+++ b/tests/auto/render/raycastingjob/tst_raycastingjob.cpp
@@ -52,7 +52,6 @@
#include <Qt3DRender/private/updateworldtransformjob_p.h>
#include <Qt3DRender/private/expandboundingvolumejob_p.h>
#include <Qt3DRender/private/calcboundingvolumejob_p.h>
-#include <Qt3DRender/private/updateentityhierarchyjob_p.h>
#include <Qt3DRender/private/calcgeometrytrianglevolumes_p.h>
#include <Qt3DRender/private/loadbufferjob_p.h>
#include <Qt3DRender/private/buffermanager_p.h>
@@ -88,6 +87,23 @@ QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root)
return nodes;
}
+QVector<Qt3DCore::NodeTreeChange> nodeTreeChangesForNodes(const QVector<Qt3DCore::QNode *> nodes)
+{
+ QVector<Qt3DCore::NodeTreeChange> nodeTreeChanges;
+ nodeTreeChanges.reserve(nodes.size());
+
+ for (Qt3DCore::QNode *n : nodes) {
+ nodeTreeChanges.push_back({
+ n->id(),
+ Qt3DCore::QNodePrivate::get(n)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ n
+ });
+ }
+
+ return nodeTreeChanges;
+}
+
class TestAspect : public Qt3DRender::QRenderAspect
{
public:
@@ -98,7 +114,7 @@ public:
QRenderAspect::onRegistered();
const QVector<Qt3DCore::QNode *> nodes = getNodesForCreation(root);
- d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodes);
+ d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodeTreeChangesForNodes(nodes));
Render::Entity *rootEntity = nodeManagers()->lookupResource<Render::Entity, Render::EntityManager>(rootEntityId());
Q_ASSERT(rootEntity);
@@ -130,10 +146,6 @@ namespace {
void runRequiredJobs(Qt3DRender::TestAspect *test)
{
- Qt3DRender::Render::UpdateEntityHierarchyJob updateEntitiesJob;
- updateEntitiesJob.setManager(test->nodeManagers());
- updateEntitiesJob.run();
-
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
updateWorldTransform.setManagers(test->nodeManagers());
diff --git a/tests/auto/render/rendercapture/tst_rendercapture.cpp b/tests/auto/render/rendercapture/tst_rendercapture.cpp
index 78b792b01..194c5cd24 100644
--- a/tests/auto/render/rendercapture/tst_rendercapture.cpp
+++ b/tests/auto/render/rendercapture/tst_rendercapture.cpp
@@ -49,7 +49,7 @@ private Q_SLOTS:
// WHEN
backend.setRenderer(&renderer);
- simulateInitialization(&frontend, &backend);
+ simulateInitializationSync(&frontend, &backend);
// THEN
QVERIFY(!backend.peerId().isNull());
@@ -61,34 +61,33 @@ private Q_SLOTS:
void checkEnabledPropertyChange()
{
// GIVEN
+ Qt3DRender::QRenderCapture frontend;
Qt3DRender::Render::RenderCapture renderCapture;
TestRenderer renderer;
renderCapture.setRenderer(&renderer);
+ simulateInitializationSync(&frontend, &renderCapture);
// WHEN
- Qt3DCore::QPropertyUpdatedChangePtr change(new Qt3DCore::QPropertyUpdatedChange(renderCapture.peerId()));
- change->setPropertyName(QByteArrayLiteral("enabled"));
- change->setValue(QVariant::fromValue(true));
- sceneChangeEvent(&renderCapture, change);
+ frontend.setEnabled(false);
+ renderCapture.syncFromFrontEnd(&frontend, false);
// THEN
- QCOMPARE(renderCapture.isEnabled(), true);
+ QCOMPARE(renderCapture.isEnabled(), false);
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
}
void checkReceiveRenderCaptureRequest()
{
// GIVEN
+ Qt3DRender::QRenderCapture frontend;
Qt3DRender::Render::RenderCapture renderCapture;
TestRenderer renderer;
renderCapture.setRenderer(&renderer);
- renderCapture.setEnabled(true);
+ simulateInitializationSync(&frontend, &renderCapture);
// WHEN
- Qt3DCore::QPropertyUpdatedChangePtr change(new Qt3DCore::QPropertyUpdatedChange(renderCapture.peerId()));
- change->setPropertyName(QByteArrayLiteral("renderCaptureRequest"));
- change->setValue(QVariant::fromValue(32));
- sceneChangeEvent(&renderCapture, change);
+ frontend.requestCapture();
+ renderCapture.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(renderCapture.wasCaptureRequested(), true);
diff --git a/tests/auto/render/renderer/tst_renderer.cpp b/tests/auto/render/renderer/tst_renderer.cpp
index a823c233a..973192d6a 100644
--- a/tests/auto/render/renderer/tst_renderer.cpp
+++ b/tests/auto/render/renderer/tst_renderer.cpp
@@ -315,30 +315,6 @@ private Q_SLOTS:
renderQueue->reset();
// WHEN
- renderer.markDirty(Qt3DRender::Render::AbstractRenderer::EntityHierarchyDirty, nullptr);
- jobs = renderer.renderBinJobs();
-
- // THEN
- QCOMPARE(jobs.size(),
- 1 + // EntityEnabledDirty
- 1 + // EntityHierarchyJob
- 1 + // WorldTransformJob
- 1 + // UpdateWorldBoundingVolume
- 1 + // UpdateShaderDataTransform
- 1 + // ExpandBoundingVolumeJob
- 1 + // UpdateEntityLayersJob
- 1 + // updateLevelOfDetailJob
- 1 + // syncLoadingJobs
- 1 + // updateSkinningPaletteJob
- 1 + // cleanupJob
- 1 + // sendBufferCaptureJob
- singleRenderViewJobCount +
- layerCacheJobCount);
-
- renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- renderQueue->reset();
-
- // WHEN
renderer.markDirty(Qt3DRender::Render::AbstractRenderer::AllDirty, nullptr);
jobs = renderer.renderBinJobs();
@@ -346,7 +322,6 @@ private Q_SLOTS:
// and ShaderGathererJob are not added here)
QCOMPARE(jobs.size(),
1 + // EntityEnabledDirty
- 1 + // EntityHierarchyDirty
1 + // WorldTransformJob
1 + // UpdateWorldBoundingVolume
1 + // UpdateShaderDataTransform
diff --git a/tests/auto/render/renderpass/tst_renderpass.cpp b/tests/auto/render/renderpass/tst_renderpass.cpp
index a4a2762ba..7be741936 100644
--- a/tests/auto/render/renderpass/tst_renderpass.cpp
+++ b/tests/auto/render/renderpass/tst_renderpass.cpp
@@ -70,6 +70,7 @@ using namespace Qt3DRender::Render;
class tst_RenderRenderPass : public Qt3DCore::QBackendNodeTester
{
Q_OBJECT
+
public:
tst_RenderRenderPass()
: m_renderStateManager(new RenderStateManager())
@@ -96,6 +97,8 @@ private slots:
{
// GIVEN
RenderPass backend;
+ TestRenderer renderer;
+ backend.setRenderer(&renderer);
// WHEN
backend.setEnabled(true);
@@ -112,7 +115,7 @@ private slots:
frontend.addRenderState(&state);
frontend.setShaderProgram(&program);
- simulateInitialization(&frontend, &backend);
+ simulateInitializationSync(&frontend, &backend);
}
backend.cleanup();
@@ -141,12 +144,14 @@ private slots:
frontend.addRenderState(frontendState);
RenderPass backend;
+ TestRenderer renderer;
+ backend.setRenderer(&renderer);
RenderStateNode *backendState = m_renderStateManager->getOrCreateResource(frontendState->id());
- simulateInitialization(frontendState, backendState);
+ simulateInitializationSync(frontendState, backendState);
// WHEN
- simulateInitialization(&frontend, &backend);
+ simulateInitializationSync(&frontend, &backend);
// THEN
QCOMPARE(backend.shaderProgram(), frontend.shaderProgram()->id());
@@ -165,25 +170,26 @@ private slots:
void shouldHandleShaderPropertyChangeEvents()
{
// GIVEN
- QScopedPointer<QShaderProgram> shader(new QShaderProgram);
+ QShaderProgram *shader = new QShaderProgram;
RenderPass backend;
TestRenderer renderer;
backend.setRenderer(&renderer);
+ QRenderPass frontend;
+ simulateInitializationSync(&frontend, &backend);
+
// WHEN
- const auto addChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), shader.data());
- addChange->setPropertyName("shaderProgram");
- backend.sceneChangeEvent(addChange);
+ frontend.setShaderProgram(shader);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.shaderProgram(), shader->id());
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- const auto removeChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), shader.data());
- removeChange->setPropertyName("shaderProgram");
- backend.sceneChangeEvent(removeChange);
+ frontend.setShaderProgram(nullptr);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QVERIFY(backend.shaderProgram().isNull());
@@ -192,16 +198,18 @@ private slots:
void shouldHandleAnnotationsPropertyChangeEvents()
{
// GIVEN
- QScopedPointer<QFilterKey> annotation(new QFilterKey);
+ QFilterKey *annotation = new QFilterKey;
RenderPass backend;
TestRenderer renderer;
backend.setRenderer(&renderer);
+ QRenderPass frontend;
+ simulateInitializationSync(&frontend, &backend);
+
// WHEN
- const auto addChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), annotation.data());
- addChange->setPropertyName("filterKeys");
- backend.sceneChangeEvent(addChange);
+ frontend.addFilterKey(annotation);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.filterKeys().size(), 1);
@@ -209,9 +217,8 @@ private slots:
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- const auto removeChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), annotation.data());
- removeChange->setPropertyName("filterKeys");
- backend.sceneChangeEvent(removeChange);
+ frontend.removeFilterKey(annotation);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QVERIFY(backend.filterKeys().isEmpty());
@@ -220,16 +227,18 @@ private slots:
void shouldHandleParametersPropertyChangeEvents()
{
// GIVEN
- QScopedPointer<QParameter> parameter(new QParameter);
+ QParameter *parameter = new QParameter;
RenderPass backend;
TestRenderer renderer;
backend.setRenderer(&renderer);
+ QRenderPass frontend;
+ simulateInitializationSync(&frontend, &backend);
+
// WHEN
- const auto addChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), parameter.data());
- addChange->setPropertyName("parameter");
- backend.sceneChangeEvent(addChange);
+ frontend.addParameter(parameter);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().size(), 1);
@@ -237,9 +246,8 @@ private slots:
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- const auto removeChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), parameter.data());
- removeChange->setPropertyName("parameter");
- backend.sceneChangeEvent(removeChange);
+ frontend.removeParameter(parameter);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QVERIFY(backend.parameters().isEmpty());
@@ -254,12 +262,14 @@ private slots:
backend.setRenderer(&renderer);
RenderStateNode *backendState = m_renderStateManager->getOrCreateResource(frontendState->id());
- simulateInitialization(frontendState, backendState);
+ simulateInitializationSync(frontendState, backendState);
+
+ QRenderPass frontend;
+ simulateInitializationSync(&frontend, &backend);
// WHEN
- const auto addChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), frontendState);
- addChange->setPropertyName("renderState");
- backend.sceneChangeEvent(addChange);
+ frontend.addRenderState(frontendState);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.renderStates().size(), 1);
@@ -267,32 +277,13 @@ private slots:
QVERIFY(renderer.dirtyBits() != 0);
// WHEN
- const auto removeChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), frontendState);
- removeChange->setPropertyName("renderState");
- backend.sceneChangeEvent(removeChange);
+ frontend.removeRenderState(frontendState);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QVERIFY(backend.renderStates().isEmpty());
}
- void shouldHandleShaderProgramPropertyChangeEvents()
- {
- // GIVEN
- RenderPass backend;
- TestRenderer renderer;
- backend.setRenderer(&renderer);
-
- // WHEN
- Qt3DCore::QNodeId shaderId = Qt3DCore::QNodeId::createId();
- const auto shaderChange = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- shaderChange->setPropertyName("shaderProgram");
- shaderChange->setValue(QVariant::fromValue(shaderId));
- backend.sceneChangeEvent(shaderChange);
-
- // THEN
- QCOMPARE(backend.shaderProgram(), shaderId);
- }
-
private:
RenderStateManager *m_renderStateManager;
};
diff --git a/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp b/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
index 18c3b3f36..22a461e4a 100644
--- a/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
+++ b/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
@@ -78,7 +78,12 @@ public:
});
for (const auto node: nodes)
- d_func()->createBackendNode(node);
+ d_func()->createBackendNode({
+ node->id(),
+ Qt3DCore::QNodePrivate::get(node)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ node
+ });
}
~TestAspect()
diff --git a/tests/auto/render/renderviews/tst_renderviews.cpp b/tests/auto/render/renderviews/tst_renderviews.cpp
index aef1c3657..f38915bf8 100644
--- a/tests/auto/render/renderviews/tst_renderviews.cpp
+++ b/tests/auto/render/renderviews/tst_renderviews.cpp
@@ -119,7 +119,7 @@ private Q_SLOTS:
// WHEN
frontendBarrier.setWaitOperations(barriers);
- simulateInitialization(&frontendBarrier, &backendBarrier);
+ simulateInitializationSync(&frontendBarrier, &backendBarrier);
// THEN
QCOMPARE(renderView.memoryBarrier(), QMemoryBarrier::None);
diff --git a/tests/auto/render/scene2d/tst_scene2d.cpp b/tests/auto/render/scene2d/tst_scene2d.cpp
index c30400202..f620064ed 100644
--- a/tests/auto/render/scene2d/tst_scene2d.cpp
+++ b/tests/auto/render/scene2d/tst_scene2d.cpp
@@ -276,7 +276,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer, backendBuffer);
+ simulateInitializationSync(dataBuffer, backendBuffer);
positionAttribute->setBuffer(dataBuffer);
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -304,28 +304,28 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(
positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute, backendAttribute);
+ simulateInitializationSync(positionAttribute, backendAttribute);
Attribute *backendTexcoordAttribute = nodeManagers->attributeManager()
->getOrCreateResource(texcoordAttribute->id());
backendTexcoordAttribute->setRenderer(&renderer);
- simulateInitialization(texcoordAttribute, backendTexcoordAttribute);
+ simulateInitializationSync(texcoordAttribute, backendTexcoordAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()
->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()
->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer, backendRenderer);
+ simulateInitializationSync(geometryRenderer, backendRenderer);
Entity *backendEntity = nodeManagers->renderNodesManager()->getOrCreateResource(entity->id());
backendEntity->setRenderer(&renderer);
backendEntity->setNodeManagers(nodeManagers.data());
- simulateInitialization(entity.data(), backendEntity);
+ simulateInitializationSync(entity.data(), backendEntity);
#define PICK_TRIANGLE(tri, v0, v1, v2, uvw) \
new Qt3DRender::QPickTriangleEvent(QPointF(), QVector3D(), QVector3D(), 0.0f, \
diff --git a/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp b/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp
index da420e1ac..4db12136a 100644
--- a/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp
+++ b/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp
@@ -185,7 +185,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -202,16 +202,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -254,7 +254,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 2 * 5);
@@ -274,7 +274,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -298,20 +298,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -354,7 +354,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -371,16 +371,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -423,7 +423,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 2 * 4);
@@ -437,7 +437,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -461,20 +461,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -515,7 +515,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -532,16 +532,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -585,7 +585,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 2 * 4);
@@ -599,7 +599,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -623,20 +623,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -679,7 +679,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -696,16 +696,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -747,7 +747,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 4);
@@ -761,7 +761,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -785,20 +785,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
diff --git a/tests/auto/render/setfence/tst_setfence.cpp b/tests/auto/render/setfence/tst_setfence.cpp
index b70bf548c..92f7a0acc 100644
--- a/tests/auto/render/setfence/tst_setfence.cpp
+++ b/tests/auto/render/setfence/tst_setfence.cpp
@@ -75,7 +75,7 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::SetFence backendSetFence;
backendSetFence.setRenderer(&renderer);
- simulateInitialization(&setFence, &backendSetFence);
+ simulateInitializationSync(&setFence, &backendSetFence);
// THEN
QCOMPARE(backendSetFence.isEnabled(), true);
@@ -88,7 +88,7 @@ private Q_SLOTS:
Qt3DRender::Render::SetFence backendSetFence;
setFence.setEnabled(false);
backendSetFence.setRenderer(&renderer);
- simulateInitialization(&setFence, &backendSetFence);
+ simulateInitializationSync(&setFence, &backendSetFence);
// THEN
QCOMPARE(backendSetFence.peerId(), setFence.id());
@@ -101,16 +101,16 @@ private Q_SLOTS:
{
// GIVEN
Qt3DRender::Render::SetFence backendSetFence;
+ Qt3DRender::QSetFence setFence;
TestRenderer renderer;
backendSetFence.setRenderer(&renderer);
+ simulateInitializationSync(&setFence, &backendSetFence);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendSetFence.sceneChangeEvent(change);
+ setFence.setEnabled(newValue);
+ backendSetFence.syncFromFrontEnd(&setFence, false);
// THEN
QCOMPARE(backendSetFence.isEnabled(), newValue);
diff --git a/tests/auto/render/skeleton/tst_skeleton.cpp b/tests/auto/render/skeleton/tst_skeleton.cpp
index 499bb7cc7..17996470c 100644
--- a/tests/auto/render/skeleton/tst_skeleton.cpp
+++ b/tests/auto/render/skeleton/tst_skeleton.cpp
@@ -86,7 +86,7 @@ private Q_SLOTS:
skeleton.setSource(QUrl::fromLocalFile("funnybones.json"));
// WHEN
- simulateInitialization(&skeleton, &backendSkeleton);
+ simulateInitializationSync(&skeleton, &backendSkeleton);
// THEN
QCOMPARE(backendSkeleton.peerId(), skeleton.id());
@@ -104,7 +104,7 @@ private Q_SLOTS:
skeleton2.setRootJoint(joint);
// WHEN
- simulateInitialization(&skeleton2, &backendSkeleton2);
+ simulateInitializationSync(&skeleton2, &backendSkeleton2);
// THEN
QCOMPARE(backendSkeleton2.peerId(), skeleton2.id());
@@ -135,7 +135,7 @@ private Q_SLOTS:
skeleton.setSource(QUrl::fromLocalFile("skeleton1.json"));
// WHEN
- simulateInitialization(&skeleton, &backendSkeleton);
+ simulateInitializationSync(&skeleton, &backendSkeleton);
backendSkeleton.cleanup();
// THEN
@@ -145,7 +145,7 @@ private Q_SLOTS:
QCOMPARE(backendSkeleton.rootJointId(), QNodeId());
}
- void checkPropertyChanges()
+ void checkDirectPropertyChanges()
{
// GIVEN
TestRenderer renderer;
@@ -160,36 +160,22 @@ private Q_SLOTS:
// Initialize to ensure skeleton manager is set
QSkeletonLoader skeleton;
skeleton.setSource(QUrl::fromLocalFile("skeleton1.json"));
- simulateInitialization(&skeleton, &backendSkeleton);
+ simulateInitializationSync(&skeleton, &backendSkeleton);
// WHEN
- updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setPropertyName("enabled");
- updateChange->setValue(true);
- backendSkeleton.sceneChangeEvent(updateChange);
+ skeleton.setEnabled(false);
+ backendSkeleton.syncFromFrontEnd(&skeleton, false);
// THEN
- QCOMPARE(backendSkeleton.isEnabled(), true);
+ QCOMPARE(backendSkeleton.isEnabled(), false);
// WHEN
const QUrl newSource = QUrl::fromLocalFile("terminator.json");
- updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setPropertyName("source");
- updateChange->setValue(newSource);
- backendSkeleton.sceneChangeEvent(updateChange);
+ skeleton.setSource(newSource);
+ backendSkeleton.syncFromFrontEnd(&skeleton, false);
// THEN
QCOMPARE(backendSkeleton.source(), newSource);
-
- // WHEN
- const QNodeId newRootJointId = QNodeId::createId();
- updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setPropertyName("rootJoint");
- updateChange->setValue(QVariant::fromValue(newRootJointId));
- backendSkeleton.sceneChangeEvent(updateChange);
-
- // THEN
- QCOMPARE(backendSkeleton.rootJointId(), newRootJointId);
}
void checkStatusPropertyBackendNotification()
diff --git a/tests/auto/render/sortpolicy/tst_sortpolicy.cpp b/tests/auto/render/sortpolicy/tst_sortpolicy.cpp
index d79b0b4f7..a4811d82c 100644
--- a/tests/auto/render/sortpolicy/tst_sortpolicy.cpp
+++ b/tests/auto/render/sortpolicy/tst_sortpolicy.cpp
@@ -70,7 +70,7 @@ private Q_SLOTS:
// WHEN
backendNode.setRenderer(&renderer);
- simulateInitialization(&sortPolicy, &backendNode);
+ simulateInitializationSync(&sortPolicy, &backendNode);
// THEN
QCOMPARE(backendNode.peerId(), sortPolicy.id());
@@ -88,15 +88,14 @@ private Q_SLOTS:
Qt3DRender::Render::SortPolicy backendNode;
backendNode.setRenderer(&renderer);
+ Qt3DRender::QSortPolicy sortPolicy;
+ sortPolicy.setSortTypes(sortTypes);
+
+ simulateInitializationSync(&sortPolicy, &backendNode);
+
// WHEN
- auto sortTypeInts = QVector<int>();
- std::transform(sortTypes.constBegin(), sortTypes.constEnd(),
- std::back_inserter(sortTypeInts),
- [] (Qt3DRender::QSortPolicy::SortType type) -> int { return type; });
- Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setValue(QVariant::fromValue(sortTypeInts));
- updateChange->setPropertyName("sortTypes");
- backendNode.sceneChangeEvent(updateChange);
+ sortPolicy.setSortTypes(sortTypes);
+ backendNode.syncFromFrontEnd(&sortPolicy, false);
// THEN
QCOMPARE(backendNode.sortTypes(), sortTypes);
diff --git a/tests/auto/render/technique/tst_technique.cpp b/tests/auto/render/technique/tst_technique.cpp
index 7d7a0f8ca..64a66f0c8 100644
--- a/tests/auto/render/technique/tst_technique.cpp
+++ b/tests/auto/render/technique/tst_technique.cpp
@@ -96,7 +96,7 @@ private Q_SLOTS:
technique.addParameter(&parameter);
technique.addFilterKey(&filterKey);
- simulateInitialization(&technique, &backendTechnique);
+ simulateInitializationSync(&technique, &backendTechnique);
}
backendTechnique.cleanup();
@@ -129,7 +129,7 @@ private Q_SLOTS:
backendTechnique.setRenderer(&renderer);
backendTechnique.setNodeManager(&nodeManagers);
- simulateInitialization(&technique, &backendTechnique);
+ simulateInitializationSync(&technique, &backendTechnique);
// THEN
QCOMPARE(backendTechnique.isEnabled(), true);
@@ -157,7 +157,7 @@ private Q_SLOTS:
backendTechnique.setNodeManager(&nodeManagers);
backendTechnique.setRenderer(&renderer);
technique.setEnabled(false);
- simulateInitialization(&technique, &backendTechnique);
+ simulateInitializationSync(&technique, &backendTechnique);
// THEN
QCOMPARE(backendTechnique.peerId(), technique.id());
@@ -184,6 +184,7 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DRender::QTechnique technique;
Qt3DRender::Render::Technique backendTechnique;
Qt3DRender::Render::NodeManagers nodeManagers;
@@ -193,34 +194,31 @@ private Q_SLOTS:
{
// WHEN
- const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendTechnique.sceneChangeEvent(change);
+ const bool newValue = true;
+ technique.setEnabled(newValue);
+ backendTechnique.syncFromFrontEnd(&technique, false);
// THEN
QCOMPARE(backendTechnique.isEnabled(), newValue);
QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ QCOMPARE(nodeManagers.techniqueManager()->takeDirtyTechniques().size(), 1);
}
{
// WHEN
backendTechnique.setCompatibleWithRenderer(true);
QCOMPARE(nodeManagers.techniqueManager()->takeDirtyTechniques().size(), 0);
- Qt3DRender::GraphicsApiFilterData newValue;
- newValue.m_major = 4;
- newValue.m_minor = 5;
- newValue.m_vendor = QStringLiteral("ATI");
+ technique.graphicsApiFilter()->setMajorVersion(4);
+ technique.graphicsApiFilter()->setMinorVersion(5);
+ technique.graphicsApiFilter()->setVendor(QStringLiteral("ATI"));
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("graphicsApiFilterData");
- change->setValue(QVariant::fromValue(newValue));
- backendTechnique.sceneChangeEvent(change);
+ backendTechnique.syncFromFrontEnd(&technique, false);
// THEN
- QCOMPARE(*backendTechnique.graphicsApiFilter(), newValue);
+ QCOMPARE(backendTechnique.graphicsApiFilter()->m_major, technique.graphicsApiFilter()->majorVersion());
+ QCOMPARE(backendTechnique.graphicsApiFilter()->m_minor, technique.graphicsApiFilter()->minorVersion());
+ QCOMPARE(backendTechnique.graphicsApiFilter()->m_vendor, technique.graphicsApiFilter()->vendor());
QCOMPARE(backendTechnique.isCompatibleWithRenderer(), false);
const QVector<Qt3DCore::QNodeId> dirtyTechniques = nodeManagers.techniqueManager()->takeDirtyTechniques();
@@ -235,9 +233,8 @@ private Q_SLOTS:
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &parameter);
- change->setPropertyName("parameter");
- backendTechnique.sceneChangeEvent(change);
+ technique.addParameter(&parameter);
+ backendTechnique.syncFromFrontEnd(&technique, false);
// THEN
QCOMPARE(backendTechnique.parameters().size(), 1);
@@ -247,9 +244,8 @@ private Q_SLOTS:
}
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &parameter);
- change->setPropertyName("parameter");
- backendTechnique.sceneChangeEvent(change);
+ technique.removeParameter(&parameter);
+ backendTechnique.syncFromFrontEnd(&technique, false);
// THEN
QCOMPARE(backendTechnique.parameters().size(), 0);
@@ -262,9 +258,8 @@ private Q_SLOTS:
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &filterKey);
- change->setPropertyName("filterKeys");
- backendTechnique.sceneChangeEvent(change);
+ technique.addFilterKey(&filterKey);
+ backendTechnique.syncFromFrontEnd(&technique, false);
// THEN
QCOMPARE(backendTechnique.filterKeys().size(), 1);
@@ -274,9 +269,8 @@ private Q_SLOTS:
}
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &filterKey);
- change->setPropertyName("filterKeys");
- backendTechnique.sceneChangeEvent(change);
+ technique.removeFilterKey(&filterKey);
+ backendTechnique.syncFromFrontEnd(&technique, false);
// THEN
QCOMPARE(backendTechnique.filterKeys().size(), 0);
@@ -289,9 +283,8 @@ private Q_SLOTS:
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &pass);
- change->setPropertyName("pass");
- backendTechnique.sceneChangeEvent(change);
+ technique.addRenderPass(&pass);
+ backendTechnique.syncFromFrontEnd(&technique, false);
// THEN
QCOMPARE(backendTechnique.renderPasses().size(), 1);
@@ -301,9 +294,8 @@ private Q_SLOTS:
}
{
// WHEN
- const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &pass);
- change->setPropertyName("pass");
- backendTechnique.sceneChangeEvent(change);
+ technique.removeRenderPass(&pass);
+ backendTechnique.syncFromFrontEnd(&technique, false);
// THEN
QCOMPARE(backendTechnique.renderPasses().size(), 0);
diff --git a/tests/auto/render/texture/tst_texture.cpp b/tests/auto/render/texture/tst_texture.cpp
index 1d69c54be..a51f082a7 100644
--- a/tests/auto/render/texture/tst_texture.cpp
+++ b/tests/auto/render/texture/tst_texture.cpp
@@ -244,7 +244,7 @@ void tst_RenderTexture::checkPropertyMirroring()
frontend.setSamples(32);
// WHEN
- simulateInitialization(&frontend, &backend);
+ simulateInitializationSync(&frontend, &backend);
// THEN
QCOMPARE(backend.peerId(), frontend.id());
@@ -275,15 +275,14 @@ void tst_RenderTexture::checkPropertyChanges()
{
// GIVEN
TestRenderer renderer;
+ Qt3DRender::QSharedGLTexture frontend;
Qt3DRender::Render::Texture backend;
backend.setRenderer(&renderer);
backend.unsetDirty();
// WHEN
- Qt3DCore::QPropertyUpdatedChangePtr updateChange(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId()));
- updateChange->setValue(256);
- updateChange->setPropertyName("width");
- backend.sceneChangeEvent(updateChange);
+ frontend.setWidth(256);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.properties().width, 256);
@@ -293,10 +292,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(128);
- updateChange->setPropertyName("height");
- backend.sceneChangeEvent(updateChange);
+ frontend.setHeight(128);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.properties().height, 128);
@@ -306,10 +303,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(16);
- updateChange->setPropertyName("depth");
- backend.sceneChangeEvent(updateChange);
+ frontend.setDepth(16);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.properties().depth, 16);
@@ -319,10 +314,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QAbstractTexture::RGB16F));
- updateChange->setPropertyName("format");
- backend.sceneChangeEvent(updateChange);
+ frontend.setFormat(Qt3DRender::QAbstractTexture::RGB16F);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.properties().format, Qt3DRender::QAbstractTexture::RGB16F);
@@ -332,23 +325,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QAbstractTexture::Target1DArray));
- updateChange->setPropertyName("target");
- backend.sceneChangeEvent(updateChange);
-
- // THEN
- QCOMPARE(backend.properties().target, Qt3DRender::QAbstractTexture::Target1DArray);
- QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TexturesDirty);
- QVERIFY(backend.dirtyFlags() == Qt3DRender::Render::Texture::DirtyProperties);
- renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- backend.unsetDirty();
-
- // WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(true);
- updateChange->setPropertyName("mipmaps");
- backend.sceneChangeEvent(updateChange);
+ frontend.setGenerateMipMaps(true);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.properties().generateMipMaps, true);
@@ -358,10 +336,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QAbstractTexture::LinearMipMapLinear));
- updateChange->setPropertyName("minificationFilter");
- backend.sceneChangeEvent(updateChange);
+ frontend.setMinificationFilter(Qt3DRender::QAbstractTexture::LinearMipMapLinear);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().minificationFilter, Qt3DRender::QAbstractTexture::LinearMipMapLinear);
@@ -371,10 +347,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QAbstractTexture::Linear));
- updateChange->setPropertyName("magnificationFilter");
- backend.sceneChangeEvent(updateChange);
+ frontend.setMagnificationFilter(Qt3DRender::QAbstractTexture::Linear);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().magnificationFilter, Qt3DRender::QAbstractTexture::Linear);
@@ -384,10 +358,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QTextureWrapMode::Repeat));
- updateChange->setPropertyName("wrapModeX");
- backend.sceneChangeEvent(updateChange);
+ frontend.wrapMode()->setX(Qt3DRender::QTextureWrapMode::Repeat);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().wrapModeX, Qt3DRender::QTextureWrapMode::Repeat);
@@ -397,10 +369,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QTextureWrapMode::Repeat));
- updateChange->setPropertyName("wrapModeY");
- backend.sceneChangeEvent(updateChange);
+ frontend.wrapMode()->setY(Qt3DRender::QTextureWrapMode::Repeat);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().wrapModeY, Qt3DRender::QTextureWrapMode::Repeat);
@@ -410,10 +380,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QTextureWrapMode::Repeat));
- updateChange->setPropertyName("wrapModeZ");
- backend.sceneChangeEvent(updateChange);
+ frontend.wrapMode()->setZ(Qt3DRender::QTextureWrapMode::Repeat);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().wrapModeZ, Qt3DRender::QTextureWrapMode::Repeat);
@@ -423,10 +391,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(16.0f);
- updateChange->setPropertyName("maximumAnisotropy");
- backend.sceneChangeEvent(updateChange);
+ frontend.setMaximumAnisotropy(16.f);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().maximumAnisotropy, 16.0f);
@@ -436,10 +402,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QAbstractTexture::CompareEqual));
- updateChange->setPropertyName("comparisonFunction");
- backend.sceneChangeEvent(updateChange);
+ frontend.setComparisonFunction(Qt3DRender::QAbstractTexture::CompareEqual);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().comparisonFunction, Qt3DRender::QAbstractTexture::CompareEqual);
@@ -449,10 +413,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(QVariant::fromValue(Qt3DRender::QAbstractTexture::CompareRefToTexture));
- updateChange->setPropertyName("comparisonMode");
- backend.sceneChangeEvent(updateChange);
+ frontend.setComparisonMode(Qt3DRender::QAbstractTexture::CompareRefToTexture);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.parameters().comparisonMode, Qt3DRender::QAbstractTexture::CompareRefToTexture);
@@ -462,10 +424,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(32);
- updateChange->setPropertyName("layers");
- backend.sceneChangeEvent(updateChange);
+ frontend.setLayers(32);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.properties().layers, 32);
@@ -475,10 +435,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(64);
- updateChange->setPropertyName("samples");
- backend.sceneChangeEvent(updateChange);
+ frontend.setSamples(64);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.properties().samples, 64);
@@ -488,24 +446,8 @@ void tst_RenderTexture::checkPropertyChanges()
backend.unsetDirty();
// WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- Qt3DRender::QTextureGeneratorPtr gen = QSharedPointer<FakeGenerator>::create();
- updateChange->setValue(QVariant::fromValue(gen));
- updateChange->setPropertyName("generator");
- backend.sceneChangeEvent(updateChange);
-
- // THEN
- QCOMPARE(backend.dataGenerator(), gen);
- QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TexturesDirty);
- QVERIFY(backend.dirtyFlags() == Qt3DRender::Render::Texture::DirtyDataGenerator);
- renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
- backend.unsetDirty();
-
- // WHEN
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setValue(883);
- updateChange->setPropertyName("textureId");
- backend.sceneChangeEvent(updateChange);
+ frontend.setTextureId(883);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
QCOMPARE(backend.sharedTextureId(), 883);
@@ -533,10 +475,8 @@ void tst_RenderTexture::checkPropertyChanges()
updateData.setX(100);
updateData.setY(100);
updateData.setZ(100);
- updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId());
- updateChange->setPropertyName("updateData");
- updateChange->setValue(QVariant::fromValue(updateData));
- backend.sceneChangeEvent(updateChange);
+ frontend.updateData(updateData);
+ backend.syncFromFrontEnd(&frontend, false);
// THEN
const QVector<Qt3DRender::QTextureDataUpdate> pendingUpdates = backend.takePendingTextureDataUpdates();
@@ -589,7 +529,7 @@ void tst_RenderTexture::checkInitialUpdateData()
// WHEN -> updateData with no backend/arbiter
frontend.updateData(updateData);
- simulateInitialization(&frontend, &backend);
+ simulateInitializationSync(&frontend, &backend);
// THEN -> should have received the update as part of the initial data
const QVector<Qt3DRender::QTextureDataUpdate> pendingUpdates = backend.takePendingTextureDataUpdates();
diff --git a/tests/auto/render/transform/tst_transform.cpp b/tests/auto/render/transform/tst_transform.cpp
index 8e4ab8ef0..3238da2fe 100644
--- a/tests/auto/render/transform/tst_transform.cpp
+++ b/tests/auto/render/transform/tst_transform.cpp
@@ -59,6 +59,7 @@ private Q_SLOTS:
// GIVEN
TestRenderer renderer;
Qt3DRender::Render::Transform backendTransform;
+ backendTransform.setRenderer(&renderer);
// WHEN
{
@@ -67,7 +68,7 @@ private Q_SLOTS:
transform.setTranslation(QVector3D(-1.0, 5.0f, -2.0f));
transform.setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 0.0f, 0.0), 30.0f));
backendTransform.setRenderer(&renderer);
- simulateInitialization(&transform, &backendTransform);
+ simulateInitializationSync(&transform, &backendTransform);
}
backendTransform.setEnabled(true);
@@ -94,7 +95,9 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::Transform backendTransform;
backendTransform.setRenderer(&renderer);
- simulateInitialization(&transform, &backendTransform);
+ TestRenderer renderer;
+ backendTransform.setRenderer(&renderer);
+ simulateInitializationSync(&transform, &backendTransform);
// THEN
QCOMPARE(backendTransform.isEnabled(), true);
@@ -109,9 +112,10 @@ private Q_SLOTS:
{
// WHEN
Qt3DRender::Render::Transform backendTransform;
+ TestRenderer renderer;
backendTransform.setRenderer(&renderer);
transform.setEnabled(false);
- simulateInitialization(&transform, &backendTransform);
+ simulateInitializationSync(&transform, &backendTransform);
// THEN
QCOMPARE(backendTransform.peerId(), transform.id());
@@ -123,17 +127,18 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DCore::QTransform frontendTranform;
Qt3DRender::Render::Transform backendTransform;
TestRenderer renderer;
backendTransform.setRenderer(&renderer);
+ backendTransform.syncFromFrontEnd(&frontendTranform, true);
+ renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendTransform.sceneChangeEvent(change);
+ frontendTranform.setEnabled(newValue);
+ backendTransform.syncFromFrontEnd(&frontendTranform, false);
// THEN
QCOMPARE(backendTransform.isEnabled(), newValue);
@@ -143,10 +148,8 @@ private Q_SLOTS:
{
// WHEN
const QQuaternion newValue = QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 45.0f);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("rotation");
- change->setValue(QVariant::fromValue(newValue));
- backendTransform.sceneChangeEvent(change);
+ frontendTranform.setRotation(newValue);
+ backendTransform.syncFromFrontEnd(&frontendTranform, false);
// THEN
QCOMPARE(backendTransform.rotation(), newValue);
@@ -156,10 +159,8 @@ private Q_SLOTS:
{
// WHEN
const QVector3D newValue(454.0f, 355.0f, 0.0f);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("scale3D");
- change->setValue(QVariant::fromValue(newValue));
- backendTransform.sceneChangeEvent(change);
+ frontendTranform.setScale3D(newValue);
+ backendTransform.syncFromFrontEnd(&frontendTranform, false);
// THEN
QCOMPARE(backendTransform.scale(), newValue);
@@ -169,10 +170,8 @@ private Q_SLOTS:
{
// WHEN
const QVector3D newValue(383.0f, 0.0f, 427.0f);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("translation");
- change->setValue(QVariant::fromValue(newValue));
- backendTransform.sceneChangeEvent(change);
+ frontendTranform.setTranslation(newValue);
+ backendTransform.syncFromFrontEnd(&frontendTranform, false);
// THEN
QCOMPARE(backendTransform.translation(), newValue);
diff --git a/tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp b/tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp
index 0c3b579de..287a17b84 100644
--- a/tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp
+++ b/tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp
@@ -320,16 +320,21 @@ public:
TestAspect(Qt3DCore::QNode *root)
: Qt3DRender::QRenderAspect()
{
- QVector<Qt3DCore::QNode *> nodes;
+ QVector<Qt3DCore::NodeTreeChange> nodes;
Qt3DCore::QNodeVisitor v;
v.traverse(root, [&nodes](Qt3DCore::QNode *node) {
Qt3DCore::QNodePrivate *d = Qt3DCore::QNodePrivate::get(node);
d->m_typeInfo = const_cast<QMetaObject*>(Qt3DCore::QNodePrivate::findStaticMetaObject(node->metaObject()));
d->m_hasBackendNode = true;
- nodes << node;
+ nodes.push_back({
+ node->id(),
+ Qt3DCore::QNodePrivate::get(node)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ node
+ });
});
- for (const auto node: nodes)
+ for (const auto &node: nodes)
d_func()->createBackendNode(node);
}
diff --git a/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp b/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp
index 4205d598e..8dfda0eea 100644
--- a/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp
+++ b/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp
@@ -187,7 +187,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -204,16 +204,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -262,7 +262,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 3 * 5);
@@ -287,7 +287,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -311,20 +311,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -374,7 +374,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -391,16 +391,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -451,7 +451,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 3 * 4);
@@ -473,7 +473,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -497,20 +497,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -563,7 +563,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -580,16 +580,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -640,7 +640,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 3 * 2);
@@ -656,7 +656,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -680,20 +680,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -742,7 +742,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -759,16 +759,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -816,7 +816,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 3 * 4);
@@ -839,7 +839,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -863,20 +863,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -936,7 +936,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -953,16 +953,16 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
@@ -1012,7 +1012,7 @@ private Q_SLOTS:
Buffer *backendBuffer = nodeManagers->bufferManager()->getOrCreateResource(dataBuffer->id());
backendBuffer->setRenderer(&renderer);
backendBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(dataBuffer.data(), backendBuffer);
+ simulateInitializationSync(dataBuffer.data(), backendBuffer);
QByteArray indexData;
indexData.resize(sizeof(uint) * 8);
@@ -1030,7 +1030,7 @@ private Q_SLOTS:
Buffer *backendIndexBuffer = nodeManagers->bufferManager()->getOrCreateResource(indexDataBuffer->id());
backendIndexBuffer->setRenderer(&renderer);
backendIndexBuffer->setManager(nodeManagers->bufferManager());
- simulateInitialization(indexDataBuffer.data(), backendIndexBuffer);
+ simulateInitializationSync(indexDataBuffer.data(), backendIndexBuffer);
positionAttribute->setBuffer(dataBuffer.data());
positionAttribute->setName(Qt3DRender::QAttribute::defaultPositionAttributeName());
@@ -1054,20 +1054,20 @@ private Q_SLOTS:
Attribute *backendAttribute = nodeManagers->attributeManager()->getOrCreateResource(positionAttribute->id());
backendAttribute->setRenderer(&renderer);
- simulateInitialization(positionAttribute.data(), backendAttribute);
+ simulateInitializationSync(positionAttribute.data(), backendAttribute);
Attribute *backendIndexAttribute = nodeManagers->attributeManager()->getOrCreateResource(indexAttribute->id());
backendIndexAttribute->setRenderer(&renderer);
- simulateInitialization(indexAttribute.data(), backendIndexAttribute);
+ simulateInitializationSync(indexAttribute.data(), backendIndexAttribute);
Geometry *backendGeometry = nodeManagers->geometryManager()->getOrCreateResource(geometry->id());
backendGeometry->setRenderer(&renderer);
- simulateInitialization(geometry, backendGeometry);
+ simulateInitializationSync(geometry, backendGeometry);
GeometryRenderer *backendRenderer = nodeManagers->geometryRendererManager()->getOrCreateResource(geometryRenderer->id());
backendRenderer->setRenderer(&renderer);
backendRenderer->setManager(nodeManagers->geometryRendererManager());
- simulateInitialization(geometryRenderer.data(), backendRenderer);
+ simulateInitializationSync(geometryRenderer.data(), backendRenderer);
// WHEN
visitor.apply(backendRenderer, Qt3DCore::QNodeId());
diff --git a/tests/auto/render/updatemeshtrianglelistjob/tst_updatemeshtrianglelistjob.cpp b/tests/auto/render/updatemeshtrianglelistjob/tst_updatemeshtrianglelistjob.cpp
index 71576d495..df24a5ca6 100644
--- a/tests/auto/render/updatemeshtrianglelistjob/tst_updatemeshtrianglelistjob.cpp
+++ b/tests/auto/render/updatemeshtrianglelistjob/tst_updatemeshtrianglelistjob.cpp
@@ -69,6 +69,23 @@ QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root)
return nodes;
}
+QVector<Qt3DCore::NodeTreeChange> nodeTreeChangesForNodes(const QVector<Qt3DCore::QNode *> nodes)
+{
+ QVector<Qt3DCore::NodeTreeChange> nodeTreeChanges;
+ nodeTreeChanges.reserve(nodes.size());
+
+ for (Qt3DCore::QNode *n : nodes) {
+ nodeTreeChanges.push_back({
+ n->id(),
+ Qt3DCore::QNodePrivate::get(n)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ n
+ });
+ }
+
+ return nodeTreeChanges;
+}
+
class TestAspect : public Qt3DRender::QRenderAspect
{
public:
@@ -79,7 +96,7 @@ public:
Qt3DRender::QRenderAspect::onRegistered();
const QVector<Qt3DCore::QNode *> nodes = getNodesForCreation(root);
- d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodes);
+ d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodeTreeChangesForNodes(nodes));
Qt3DRender::Render::Entity *rootEntity = nodeManagers()->lookupResource<Qt3DRender::Render::Entity, Render::EntityManager>(rootEntityId());
Q_ASSERT(rootEntity);
diff --git a/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp b/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
index 4fe1794dc..492aa0fde 100644
--- a/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
+++ b/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
@@ -29,7 +29,6 @@
#include <QtTest/QTest>
#include <Qt3DRender/private/updateshaderdatatransformjob_p.h>
#include <Qt3DRender/private/updateworldtransformjob_p.h>
-#include <Qt3DRender/private/updateentityhierarchyjob_p.h>
#include <Qt3DRender/private/nodemanagers_p.h>
#include <Qt3DRender/private/managers_p.h>
#include <Qt3DRender/qrenderaspect.h>
@@ -70,6 +69,23 @@ QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root)
return nodes;
}
+QVector<Qt3DCore::NodeTreeChange> nodeTreeChangesForNodes(const QVector<Qt3DCore::QNode *> nodes)
+{
+ QVector<Qt3DCore::NodeTreeChange> nodeTreeChanges;
+ nodeTreeChanges.reserve(nodes.size());
+
+ for (Qt3DCore::QNode *n : nodes) {
+ nodeTreeChanges.push_back({
+ n->id(),
+ Qt3DCore::QNodePrivate::get(n)->m_typeInfo,
+ Qt3DCore::NodeTreeChange::Added,
+ n
+ });
+ }
+
+ return nodeTreeChanges;
+}
+
class TestAspect : public Qt3DRender::QRenderAspect
{
public:
@@ -80,7 +96,7 @@ public:
Qt3DRender::QRenderAspect::onRegistered();
const QVector<Qt3DCore::QNode *> nodes = getNodesForCreation(root);
- d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodes);
+ d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodeTreeChangesForNodes(nodes));
Qt3DRender::Render::Entity *rootEntity = nodeManagers()->lookupResource<Qt3DRender::Render::Entity, Render::EntityManager>(rootEntityId());
Q_ASSERT(rootEntity);
@@ -112,10 +128,6 @@ namespace {
void runRequiredJobs(Qt3DRender::TestAspect *test)
{
- Qt3DRender::Render::UpdateEntityHierarchyJob updateEntitiesJob;
- updateEntitiesJob.setManager(test->nodeManagers());
- updateEntitiesJob.run();
-
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
updateWorldTransform.setManagers(test->nodeManagers());
diff --git a/tests/auto/render/waitfence/tst_waitfence.cpp b/tests/auto/render/waitfence/tst_waitfence.cpp
index e8cd4c30b..e27e4ae19 100644
--- a/tests/auto/render/waitfence/tst_waitfence.cpp
+++ b/tests/auto/render/waitfence/tst_waitfence.cpp
@@ -82,7 +82,7 @@ private Q_SLOTS:
// WHEN
Qt3DRender::Render::WaitFence backendWaitFence;
backendWaitFence.setRenderer(&renderer);
- simulateInitialization(&waitFence, &backendWaitFence);
+ simulateInitializationSync(&waitFence, &backendWaitFence);
// THEN
QCOMPARE(backendWaitFence.isEnabled(), true);
@@ -99,7 +99,7 @@ private Q_SLOTS:
Qt3DRender::Render::WaitFence backendWaitFence;
waitFence.setEnabled(false);
backendWaitFence.setRenderer(&renderer);
- simulateInitialization(&waitFence, &backendWaitFence);
+ simulateInitializationSync(&waitFence, &backendWaitFence);
// THEN
QCOMPARE(backendWaitFence.peerId(), waitFence.id());
@@ -115,17 +115,17 @@ private Q_SLOTS:
void checkSceneChangeEvents()
{
// GIVEN
+ Qt3DRender::QWaitFence waitFence;
Qt3DRender::Render::WaitFence backendWaitFence;
TestRenderer renderer;
backendWaitFence.setRenderer(&renderer);
+ simulateInitializationSync(&waitFence, &backendWaitFence);
{
// WHEN
const bool newValue = false;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("enabled");
- change->setValue(newValue);
- backendWaitFence.sceneChangeEvent(change);
+ waitFence.setEnabled(newValue);
+ backendWaitFence.syncFromFrontEnd(&waitFence, false);
// THEN
QCOMPARE(backendWaitFence.isEnabled(), newValue);
@@ -135,10 +135,8 @@ private Q_SLOTS:
{
// WHEN
const QVariant newValue(984);
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("handle");
- change->setValue(QVariant::fromValue(newValue));
- backendWaitFence.sceneChangeEvent(change);
+ waitFence.setHandle(newValue);
+ backendWaitFence.syncFromFrontEnd(&waitFence, false);
// THEN
QCOMPARE(backendWaitFence.data().handle, QVariant(984));
@@ -148,10 +146,8 @@ private Q_SLOTS:
{
// WHEN
const Qt3DRender::QWaitFence::HandleType newValue = Qt3DRender::QWaitFence::OpenGLFenceId;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("handleType");
- change->setValue(QVariant::fromValue(newValue));
- backendWaitFence.sceneChangeEvent(change);
+ waitFence.setHandleType(newValue);
+ backendWaitFence.syncFromFrontEnd(&waitFence, false);
// THEN
QCOMPARE(backendWaitFence.data().handleType, Qt3DRender::QWaitFence::OpenGLFenceId);
@@ -161,10 +157,8 @@ private Q_SLOTS:
{
// WHEN
const bool newValue = true;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("waitOnCPU");
- change->setValue(QVariant::fromValue(newValue));
- backendWaitFence.sceneChangeEvent(change);
+ waitFence.setWaitOnCPU(newValue);
+ backendWaitFence.syncFromFrontEnd(&waitFence, false);
// THEN
QCOMPARE(backendWaitFence.data().waitOnCPU, true);
@@ -174,10 +168,8 @@ private Q_SLOTS:
{
// WHEN
const quint64 newValue = 984;
- const auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(Qt3DCore::QNodeId());
- change->setPropertyName("timeout");
- change->setValue(QVariant::fromValue(newValue));
- backendWaitFence.sceneChangeEvent(change);
+ waitFence.setTimeout(newValue);
+ backendWaitFence.syncFromFrontEnd(&waitFence, false);
// THEN
QCOMPARE(backendWaitFence.data().timeout, quint64(984));