From ca48552bf2c150886fe1b064a061bb77bc76f230 Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Tue, 8 Oct 2019 10:58:42 +0100 Subject: Update QAbstractTexture message handling Change-Id: I5c0ff05d405766b2e0aee992ee1c150b5a0cf059 Reviewed-by: Paul Lemire --- src/render/texture/qabstracttexture.cpp | 12 +---- src/render/texture/texture.cpp | 59 ++++------------------ src/render/texture/texture_p.h | 3 -- .../qabstracttexture/tst_qabstracttexture.cpp | 20 +++----- .../auto/render/qsceneloader/tst_qsceneloader.cpp | 1 - tests/auto/render/texture/tst_texture.cpp | 28 ++++------ tests/auto/render/textures/tst_textures.cpp | 1 - 7 files changed, 29 insertions(+), 95 deletions(-) diff --git a/src/render/texture/qabstracttexture.cpp b/src/render/texture/qabstracttexture.cpp index 46b8d1587..ab9f01d39 100644 --- a/src/render/texture/qabstracttexture.cpp +++ b/src/render/texture/qabstracttexture.cpp @@ -708,11 +708,7 @@ void QAbstractTexture::addTextureImage(QAbstractTextureImage *textureImage) if (!textureImage->parent()) textureImage->setParent(this); - if (d->m_changeArbiter != nullptr) { - const auto change = QPropertyNodeAddedChangePtr::create(id(), textureImage); - change->setPropertyName("textureImage"); - d->notifyObservers(change); - } + d->updateNode(textureImage, "textureImage", PropertyValueAdded); } } @@ -723,11 +719,7 @@ void QAbstractTexture::removeTextureImage(QAbstractTextureImage *textureImage) { Q_ASSERT(textureImage); Q_D(QAbstractTexture); - if (d->m_changeArbiter != nullptr) { - const auto change = QPropertyNodeRemovedChangePtr::create(id(), textureImage); - change->setPropertyName("textureImage"); - d->notifyObservers(change); - } + d->updateNode(textureImage, "textureImage", PropertyValueRemoved); d->m_textureImages.removeOne(textureImage); // Remove bookkeeping connection d->unregisterDestructionHelper(textureImage); diff --git a/src/render/texture/texture.cpp b/src/render/texture/texture.cpp index 13f5eae16..d120c2b39 100644 --- a/src/render/texture/texture.cpp +++ b/src/render/texture/texture.cpp @@ -93,20 +93,6 @@ void Texture::unsetDirty() m_dirty = Texture::NotDirty; } -void Texture::addTextureImage(Qt3DCore::QNodeId id) -{ - if (!m_textureImageIds.contains(id)) { - m_textureImageIds.push_back(id); - addDirtyFlag(DirtyImageGenerators); - } -} - -void Texture::removeTextureImage(Qt3DCore::QNodeId id) -{ - m_textureImageIds.removeAll(id); - addDirtyFlag(DirtyImageGenerators); -} - // This is called by Renderer::updateGLResources // when the texture has been marked for cleanup void Texture::cleanup() @@ -125,38 +111,6 @@ void Texture::cleanup() m_dirty = NotDirty; } -// ChangeArbiter/Aspect Thread -void Texture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - DirtyFlags dirty; - - switch (e->type()) { - - case PropertyValueAdded: { - const auto change = qSharedPointerCast(e); - if (change->propertyName() == QByteArrayLiteral("textureImage")) { - addTextureImage(change->addedNodeId()); - } - } - break; - - case PropertyValueRemoved: { - const auto change = qSharedPointerCast(e); - if (change->propertyName() == QByteArrayLiteral("textureImage")) { - removeTextureImage(change->removedNodeId()); - } - } - break; - - default: - break; - - } - - addDirtyFlag(dirty); - BackendNode::sceneChangeEvent(e); -} - void Texture::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) { BackendNode::syncFromFrontEnd(frontEnd, firstTime); @@ -203,8 +157,12 @@ void Texture::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) addTextureDataUpdate(pendingUpdate); dnode->m_pendingDataUpdates.clear(); - for (const auto imgNode : dnode->m_textureImages) - addTextureImage(imgNode->id()); + auto ids = Qt3DCore::qIdsForNodes(dnode->m_textureImages); + std::sort(std::begin(ids), std::end(ids)); + if (ids != m_textureImageIds) { + m_textureImageIds = ids; + addDirtyFlag(DirtyImageGenerators); + } } if (dnode->m_sharedTextureId != m_sharedTextureId) { @@ -254,8 +212,9 @@ void Texture::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &chan m_dataFunctor = data.dataFunctor; m_sharedTextureId = data.sharedTextureId; - for (const QNodeId &imgId : data.textureImageIds) - addTextureImage(imgId); + m_textureImageIds = data.textureImageIds; + if (m_textureImageIds.size()) + addDirtyFlag(DirtyImageGenerators); const QVector initialDataUpdates = data.initialDataUpdates; for (const QTextureDataUpdate &initialUpdate : initialDataUpdates) diff --git a/src/render/texture/texture_p.h b/src/render/texture/texture_p.h index 9f7237342..9e347243e 100644 --- a/src/render/texture/texture_p.h +++ b/src/render/texture/texture_p.h @@ -156,14 +156,11 @@ public: DirtyFlags dirtyFlags(); void unsetDirty(); - void addTextureImage(Qt3DCore::QNodeId id); - void removeTextureImage(Qt3DCore::QNodeId id); void cleanup(); void addTextureDataUpdate(const QTextureDataUpdate &update); QVector takePendingTextureDataUpdates() { return std::move(m_pendingTextureDataUpdates); } - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; inline const TextureProperties& properties() const { return m_properties; } diff --git a/tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp b/tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp index 6db8d20f5..a1973176e 100644 --- a/tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp +++ b/tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp @@ -829,13 +829,11 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.last().staticCast(); - QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded); - QCOMPARE(change->propertyName(), "textureImage"); - QCOMPARE(change->addedNodeId(), image.id()); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &abstractTexture); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } } @@ -854,13 +852,11 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - auto change = arbiter.events.last().staticCast(); - QCOMPARE(change->type(), Qt3DCore::PropertyValueRemoved); - QCOMPARE(change->propertyName(), "textureImage"); - QCOMPARE(change->removedNodeId(), image.id()); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &abstractTexture); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } } diff --git a/tests/auto/render/qsceneloader/tst_qsceneloader.cpp b/tests/auto/render/qsceneloader/tst_qsceneloader.cpp index 9336a0b2e..79ca6a291 100644 --- a/tests/auto/render/qsceneloader/tst_qsceneloader.cpp +++ b/tests/auto/render/qsceneloader/tst_qsceneloader.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include diff --git a/tests/auto/render/texture/tst_texture.cpp b/tests/auto/render/texture/tst_texture.cpp index a51f082a7..aec79bbbd 100644 --- a/tests/auto/render/texture/tst_texture.cpp +++ b/tests/auto/render/texture/tst_texture.cpp @@ -28,9 +28,6 @@ #include #include -#include -#include -#include #include #include "testpostmanarbiter.h" @@ -209,25 +206,21 @@ void tst_RenderTexture::checkFrontendPropertyNotifications() texture.addTextureImage(&img); // THEN - QCOMPARE(arbiter.events.size(), 1); - const auto addedChange = arbiter.events.first().staticCast(); - QCOMPARE(addedChange->propertyName(), "textureImage"); - QCOMPARE(addedChange->addedNodeId(), img.id()); - QCOMPARE(addedChange->type(), Qt3DCore::PropertyValueAdded); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &texture); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN texture.removeTextureImage(&img); // THEN - QCOMPARE(arbiter.events.size(), 1); - const auto removedChange = arbiter.events.first().staticCast(); - QCOMPARE(removedChange->propertyName(), "textureImage"); - QCOMPARE(removedChange->removedNodeId(), img.id()); - QCOMPARE(removedChange->type(), Qt3DCore::PropertyValueRemoved); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), &texture); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); } template @@ -458,9 +451,8 @@ void tst_RenderTexture::checkPropertyChanges() // WHEN Qt3DRender::QTextureImage img; - const auto imageAddChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &img); - imageAddChange->setPropertyName("textureImage"); - backend.sceneChangeEvent(imageAddChange); + frontend.addTextureImage(&img); + backend.syncFromFrontEnd(&frontend, false); // THEN QCOMPARE(backend.textureImageIds().size(), 1); diff --git a/tests/auto/render/textures/tst_textures.cpp b/tests/auto/render/textures/tst_textures.cpp index 725ddc269..555bd09a3 100644 --- a/tests/auto/render/textures/tst_textures.cpp +++ b/tests/auto/render/textures/tst_textures.cpp @@ -207,7 +207,6 @@ class tst_RenderTextures : public Qt3DCore::QBackendNodeTester texImgBackend->setRenderer(renderer); simulateInitializationSync(texImgFrontend, texImgBackend); } - backend->addTextureImage(texImgFrontend->id()); } return backend; -- cgit v1.2.3