summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-10-15 17:01:06 +0200
committerQt CI Bot <qt_ci_bot@qt-project.org>2019-10-17 17:54:03 +0000
commit683151c338046621d239ac0d9b597171c56e3991 (patch)
tree7f2b73b4336f558be1081905db76327ffc8b9a97
parent972e64655276bd9170d5e4768fcd9fe80b36a897 (diff)
parent92f29f8592f4067a07e57f81f8cde44df55c0756 (diff)
Merge "FrameGraphNode: mark dirty on cleanup"v5.14.0-beta2
-rw-r--r--src/render/framegraph/framegraphnode.cpp1
-rw-r--r--src/render/geometry/buffer.cpp4
-rw-r--r--src/render/geometry/qbuffer.cpp2
-rw-r--r--tests/auto/render/buffer/tst_buffer.cpp24
-rw-r--r--tests/auto/render/framegraphnode/tst_framegraphnode.cpp18
5 files changed, 42 insertions, 7 deletions
diff --git a/src/render/framegraph/framegraphnode.cpp b/src/render/framegraph/framegraphnode.cpp
index 58ff05dc0..40d8fca3d 100644
--- a/src/render/framegraph/framegraphnode.cpp
+++ b/src/render/framegraph/framegraphnode.cpp
@@ -123,6 +123,7 @@ QVector<FrameGraphNode *> FrameGraphNode::children() const
void FrameGraphNode::cleanup()
{
setParentId({});
+ markDirty(AbstractRenderer::FrameGraphDirty);
}
void FrameGraphNode::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime)
diff --git a/src/render/geometry/buffer.cpp b/src/render/geometry/buffer.cpp
index 998db3640..0ce81efc1 100644
--- a/src/render/geometry/buffer.cpp
+++ b/src/render/geometry/buffer.cpp
@@ -130,8 +130,10 @@ void Buffer::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
if (!node)
return;
- if (firstTime && m_manager != nullptr)
+ if (firstTime && m_manager != nullptr) {
m_manager->addBufferReference(peerId());
+ m_bufferDirty = true;
+ }
m_syncData = node->isSyncData();
m_access = node->accessType();
diff --git a/src/render/geometry/qbuffer.cpp b/src/render/geometry/qbuffer.cpp
index f27005f2b..d27da25c7 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)->update();
+ d->update();
emit dataChanged(bytes);
}
}
diff --git a/tests/auto/render/buffer/tst_buffer.cpp b/tests/auto/render/buffer/tst_buffer.cpp
index 1487d3728..48215bea5 100644
--- a/tests/auto/render/buffer/tst_buffer.cpp
+++ b/tests/auto/render/buffer/tst_buffer.cpp
@@ -113,26 +113,40 @@ private Q_SLOTS:
// GIVEN
Qt3DRender::QBuffer frontendBuffer;
- frontendBuffer.setUsage(Qt3DRender::QBuffer::DynamicCopy);
- frontendBuffer.setData(QByteArrayLiteral("C7KR4"));
- frontendBuffer.setDataGenerator(Qt3DRender::QBufferDataGeneratorPtr(new TestFunctor(73)));
// WHEN
backendBuffer.setManager(&bufferManager);
backendBuffer.setRenderer(&renderer);
simulateInitializationSync(&frontendBuffer, &backendBuffer);
- frontendBuffer.updateData(2, QByteArrayLiteral("LS5"));
+ // THEN
+ QCOMPARE(backendBuffer.isDirty(), true);
+ QCOMPARE(backendBuffer.usage(), Qt3DRender::QBuffer::StaticDraw);
+ QVERIFY(backendBuffer.data().isEmpty());
+ QVERIFY(backendBuffer.dataGenerator().isNull());
+ QVERIFY(backendBuffer.pendingBufferUpdates().empty());
+
+ // WHEN
+ frontendBuffer.setUsage(Qt3DRender::QBuffer::DynamicCopy);
+ frontendBuffer.setData(QByteArrayLiteral("C7KR4"));
+ frontendBuffer.setDataGenerator(Qt3DRender::QBufferDataGeneratorPtr(new TestFunctor(73)));
backendBuffer.syncFromFrontEnd(&frontendBuffer, false);
// THEN
QCOMPARE(backendBuffer.usage(), Qt3DRender::QBuffer::DynamicCopy);
QCOMPARE(backendBuffer.isDirty(), true);
- QCOMPARE(backendBuffer.data(), QByteArrayLiteral("C7LS5"));
+ QCOMPARE(backendBuffer.data(), QByteArrayLiteral("C7KR4"));
QVERIFY(!backendBuffer.dataGenerator().isNull());
QVERIFY(!backendBuffer.pendingBufferUpdates().empty());
// WHEN
+ frontendBuffer.updateData(2, QByteArrayLiteral("LS5"));
+ backendBuffer.syncFromFrontEnd(&frontendBuffer, false);
+
+ // THEN
+ QCOMPARE(backendBuffer.isDirty(), true);
+ QCOMPARE(backendBuffer.data(), QByteArrayLiteral("C7LS5"));
+ // WHEN
backendBuffer.cleanup();
// THEN
diff --git a/tests/auto/render/framegraphnode/tst_framegraphnode.cpp b/tests/auto/render/framegraphnode/tst_framegraphnode.cpp
index 770f7e72d..a7cea2ef2 100644
--- a/tests/auto/render/framegraphnode/tst_framegraphnode.cpp
+++ b/tests/auto/render/framegraphnode/tst_framegraphnode.cpp
@@ -266,6 +266,24 @@ private Q_SLOTS:
}
}
+ void checCleanupMarksDirty()
+ {
+ // GIVEN
+ TestRenderer renderer;
+ Qt3DRender::Render::FrameGraphNode *backendFGNode = new MyFrameGraphNode();
+
+ backendFGNode->setRenderer(&renderer);
+
+ // THEN
+ QVERIFY(renderer.dirtyBits() == 0);
+
+ // WHEN
+ backendFGNode->cleanup();
+
+ // THEN
+ QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::FrameGraphDirty);
+ }
+
};
QTEST_MAIN(tst_FrameGraphNode)