summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-10-08 10:58:42 +0100
committerMike Krus <mike.krus@kdab.com>2019-10-11 07:23:45 +0100
commitca48552bf2c150886fe1b064a061bb77bc76f230 (patch)
treefb3600fe13513b6d952a8c3e6076c33579c2481d
parentd794202f3b15c31f68592bc6b8e21846e70438ad (diff)
Update QAbstractTexture message handling
Change-Id: I5c0ff05d405766b2e0aee992ee1c150b5a0cf059 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/texture/qabstracttexture.cpp12
-rw-r--r--src/render/texture/texture.cpp59
-rw-r--r--src/render/texture/texture_p.h3
-rw-r--r--tests/auto/render/qabstracttexture/tst_qabstracttexture.cpp20
-rw-r--r--tests/auto/render/qsceneloader/tst_qsceneloader.cpp1
-rw-r--r--tests/auto/render/texture/tst_texture.cpp28
-rw-r--r--tests/auto/render/textures/tst_textures.cpp1
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;