summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-08-14 11:31:30 +0100
committerPaul Lemire <paul.lemire@kdab.com>2019-09-18 11:10:49 +0200
commit3b7086e6f9f3dac6038acddbb99dfe93069976f7 (patch)
tree85ce2eaef344187b70ed7de98cb1dba4bdf46ba7
parent8ba5be4c6fb2fc2e882e5a739dfeb380b19199fe (diff)
Update QBuffer to use sync updating
Change-Id: I3a48156b6e9303842ff0670295d28e36d1ff8a9e Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/frontend/qrenderaspect.cpp2
-rw-r--r--src/render/geometry/buffer.cpp86
-rw-r--r--src/render/geometry/buffer_p.h3
-rw-r--r--src/render/geometry/qbuffer.cpp16
-rw-r--r--tests/auto/render/boundingsphere/tst_boundingsphere.cpp6
-rw-r--r--tests/auto/render/buffer/tst_buffer.cpp167
-rw-r--r--tests/auto/render/coordinatereader/tst_coordinatereader.cpp8
-rw-r--r--tests/auto/render/qbuffer/tst_qbuffer.cpp17
-rw-r--r--tests/auto/render/scene2d/tst_scene2d.cpp2
-rw-r--r--tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp24
-rw-r--r--tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp30
11 files changed, 159 insertions, 202 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index c61298c62..1e8535a3c 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -267,7 +267,7 @@ void QRenderAspectPrivate::registerBackendTypes()
// Geometry + Compute
q->registerBackendType<QAttribute>(QSharedPointer<Render::NodeFunctor<Render::Attribute, Render::AttributeManager> >::create(m_renderer));
- q->registerBackendType<QBuffer>(QSharedPointer<Render::BufferFunctor>::create(m_renderer, m_nodeManagers->bufferManager()));
+ q->registerBackendType<QBuffer, true>(QSharedPointer<Render::BufferFunctor>::create(m_renderer, m_nodeManagers->bufferManager()));
q->registerBackendType<QComputeCommand>(QSharedPointer<Render::NodeFunctor<Render::ComputeCommand, Render::ComputeCommandManager> >::create(m_renderer));
q->registerBackendType<QGeometry>(QSharedPointer<Render::NodeFunctor<Render::Geometry, Render::GeometryManager> >::create(m_renderer));
q->registerBackendType<QGeometryRenderer, true>(QSharedPointer<Render::GeometryRendererFunctor>::create(m_renderer, m_nodeManagers->geometryRendererManager()));
diff --git a/src/render/geometry/buffer.cpp b/src/render/geometry/buffer.cpp
index d60f89c7d..998db3640 100644
--- a/src/render/geometry/buffer.cpp
+++ b/src/render/geometry/buffer.cpp
@@ -113,28 +113,6 @@ void Buffer::updateDataFromGPUToCPU(QByteArray data)
notifyObservers(e);
}
-void Buffer::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
-{
- const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QBufferData>>(change);
- const auto &data = typedChange->data;
- m_data = data.data;
- m_usage = data.usage;
- m_syncData = data.syncData;
- m_access = data.access;
- m_bufferDirty = true;
-
- if (!m_data.isEmpty())
- forceDataUpload();
-
- m_functor = data.functor;
- Q_ASSERT(m_manager);
- if (m_functor)
- m_manager->addDirtyBuffer(peerId());
-
- m_manager->addBufferReference(peerId());
- markDirty(AbstractRenderer::BuffersDirty);
-}
-
void Buffer::forceDataUpload()
{
// We push back an update with offset = -1
@@ -145,40 +123,50 @@ void Buffer::forceDataUpload()
m_bufferUpdates.push_back(updateNewData);
}
-void Buffer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
+void Buffer::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
{
- if (e->type() == PropertyUpdated) {
- QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e);
- QByteArray propertyName = propertyChange->propertyName();
- if (propertyName == QByteArrayLiteral("data")) {
- QByteArray newData = propertyChange->value().toByteArray();
+ BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+ const QBuffer *node = qobject_cast<const QBuffer *>(frontEnd);
+ if (!node)
+ return;
+
+ if (firstTime && m_manager != nullptr)
+ m_manager->addBufferReference(peerId());
+
+ m_syncData = node->isSyncData();
+ m_access = node->accessType();
+ if (m_usage != node->usage()) {
+ m_usage = node->usage();
+ m_bufferDirty = true;
+ }
+ {
+ QBufferDataGeneratorPtr newGenerator = node->dataGenerator();
+ bool dirty = (newGenerator && m_functor && !(*newGenerator == *m_functor)) ||
+ (newGenerator.isNull() && !m_functor.isNull()) ||
+ (!newGenerator.isNull() && m_functor.isNull());
+ m_bufferDirty |= dirty;
+ m_functor = newGenerator;
+ if (m_functor && m_manager != nullptr)
+ m_manager->addDirtyBuffer(peerId());
+ }
+ {
+ QVariant v = node->property("QT3D_updateData");
+ if (v.isValid()) {
+ Qt3DRender::QBufferUpdate updateData = v.value<Qt3DRender::QBufferUpdate>();
+ m_data.replace(updateData.offset, updateData.data.size(), updateData.data);
+ m_bufferUpdates.push_back(updateData);
+ m_bufferDirty = true;
+ const_cast<QBuffer *>(node)->setProperty("QT3D_updateData", {});
+ } else {
+ QByteArray newData = node->data();
bool dirty = m_data != newData;
m_bufferDirty |= dirty;
m_data = newData;
- if (dirty)
+ if (dirty && !m_data.isEmpty())
forceDataUpload();
- } else if (propertyName == QByteArrayLiteral("updateData")) {
- Qt3DRender::QBufferUpdate updateData = propertyChange->value().value<Qt3DRender::QBufferUpdate>();
- m_data.replace(updateData.offset, updateData.data.size(), updateData.data);
- m_bufferUpdates.push_back(updateData);
- m_bufferDirty = true;
- } else if (propertyName == QByteArrayLiteral("usage")) {
- m_usage = static_cast<QBuffer::UsageType>(propertyChange->value().value<int>());
- m_bufferDirty = true;
- } else if (propertyName == QByteArrayLiteral("accessType")) {
- m_access = static_cast<QBuffer::AccessType>(propertyChange->value().value<int>());
- } else if (propertyName == QByteArrayLiteral("dataGenerator")) {
- QBufferDataGeneratorPtr newGenerator = propertyChange->value().value<QBufferDataGeneratorPtr>();
- m_bufferDirty |= !(newGenerator && m_functor && *newGenerator == *m_functor);
- m_functor = newGenerator;
- if (m_functor && m_manager != nullptr)
- m_manager->addDirtyBuffer(peerId());
- } else if (propertyName == QByteArrayLiteral("syncData")) {
- m_syncData = propertyChange->value().toBool();
}
- markDirty(AbstractRenderer::BuffersDirty);
}
- BackendNode::sceneChangeEvent(e);
+ markDirty(AbstractRenderer::BuffersDirty);
}
// Called by Renderer once the buffer has been uploaded to OpenGL
diff --git a/src/render/geometry/buffer_p.h b/src/render/geometry/buffer_p.h
index 9a171599d..a3f52d1b3 100644
--- a/src/render/geometry/buffer_p.h
+++ b/src/render/geometry/buffer_p.h
@@ -73,7 +73,7 @@ public:
~Buffer();
void cleanup();
- void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override;
+ void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
void setManager(BufferManager *manager);
void executeFunctor();
@@ -88,7 +88,6 @@ public:
void unsetDirty();
private:
- void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final;
void forceDataUpload();
QBuffer::UsageType m_usage;
diff --git a/src/render/geometry/qbuffer.cpp b/src/render/geometry/qbuffer.cpp
index e0574a4c5..f27005f2b 100644
--- a/src/render/geometry/qbuffer.cpp
+++ b/src/render/geometry/qbuffer.cpp
@@ -329,7 +329,7 @@ void QBuffer::setData(const QByteArray &bytes)
Q_D(QBuffer);
if (bytes != d->m_data) {
d->m_data = bytes;
- Qt3DCore::QNodePrivate::get(this)->notifyPropertyChange("data", QVariant::fromValue(d->m_data));
+ Qt3DCore::QNodePrivate::get(this)->update();
emit dataChanged(bytes);
}
}
@@ -351,11 +351,8 @@ void QBuffer::updateData(int offset, const QByteArray &bytes)
QBufferUpdate updateData;
updateData.offset = offset;
updateData.data = bytes;
-
- auto e = QPropertyUpdatedChangePtr::create(id());
- e->setPropertyName("updateData");
- e->setValue(QVariant::fromValue(updateData));
- notifyObservers(e);
+ setProperty("QT3D_updateData", QVariant::fromValue(updateData));
+ d->update();
}
/*!
@@ -409,12 +406,7 @@ void QBuffer::setDataGenerator(const QBufferDataGeneratorPtr &functor)
if (functor && d->m_functor && *functor == *d->m_functor)
return;
d->m_functor = functor;
- if (d->m_changeArbiter != nullptr) {
- auto change = QPropertyUpdatedChangePtr::create(d->m_id);
- change->setPropertyName("dataGenerator");
- change->setValue(QVariant::fromValue(d->m_functor));
- d->notifyObservers(change);
- }
+ d->update();
}
/*!
diff --git a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
index df804c260..e1b01cd13 100644
--- a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
+++ b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
@@ -314,13 +314,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)
@@ -426,7 +426,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);
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/coordinatereader/tst_coordinatereader.cpp b/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
index 6f705dca1..7077e24a0 100644
--- a/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
+++ b/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
@@ -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());
@@ -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());
@@ -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());
@@ -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());
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/scene2d/tst_scene2d.cpp b/tests/auto/render/scene2d/tst_scene2d.cpp
index 1eaeee307..a0bbd20b1 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());
diff --git a/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp b/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp
index 02f4de64f..129844917 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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
diff --git a/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp b/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp
index 6bd051029..5345a0ffc 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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());
@@ -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());