diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-10-08 10:58:42 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-11 07:23:45 +0100 |
commit | ca48552bf2c150886fe1b064a061bb77bc76f230 (patch) | |
tree | fb3600fe13513b6d952a8c3e6076c33579c2481d | |
parent | d794202f3b15c31f68592bc6b8e21846e70438ad (diff) |
Update QAbstractTexture message handling
Change-Id: I5c0ff05d405766b2e0aee992ee1c150b5a0cf059
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/render/texture/qabstracttexture.cpp | 12 | ||||
-rw-r--r-- | src/render/texture/texture.cpp | 59 | ||||
-rw-r--r-- | src/render/texture/texture_p.h | 3 | ||||
-rw-r--r-- | tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp | 20 | ||||
-rw-r--r-- | tests/auto/render/qsceneloader/tst_qsceneloader.cpp | 1 | ||||
-rw-r--r-- | tests/auto/render/texture/tst_texture.cpp | 28 | ||||
-rw-r--r-- | 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<QPropertyNodeAddedChange>(e); - if (change->propertyName() == QByteArrayLiteral("textureImage")) { - addTextureImage(change->addedNodeId()); - } - } - break; - - case PropertyValueRemoved: { - const auto change = qSharedPointerCast<QPropertyNodeRemovedChange>(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<QTextureDataUpdate> 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<QTextureDataUpdate> 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<Qt3DCore::QPropertyNodeAddedChange>(); - 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<Qt3DCore::QPropertyNodeRemovedChange>(); - 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 <Qt3DCore/private/qnode_p.h> #include <Qt3DCore/private/qscene_p.h> #include <Qt3DCore/private/qnodecreatedchangegenerator_p.h> -#include <Qt3DCore/QPropertyUpdatedChange> #include <Qt3DCore/qtransform.h> #include <Qt3DRender/qsceneloader.h> 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 <QtTest/QTest> #include <qbackendnodetester.h> -#include <Qt3DCore/qdynamicpropertyupdatedchange.h> -#include <Qt3DCore/qpropertynodeaddedchange.h> -#include <Qt3DCore/qpropertynoderemovedchange.h> #include <Qt3DRender/private/texture_p.h> #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<Qt3DCore::QPropertyNodeAddedChange>(); - 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<Qt3DCore::QPropertyNodeRemovedChange>(); - 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 <typename FrontendTextureType, Qt3DRender::QAbstractTexture::Target Target> @@ -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; |