summaryrefslogtreecommitdiffstats
path: root/src/render/texture
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 /src/render/texture
parentd794202f3b15c31f68592bc6b8e21846e70438ad (diff)
Update QAbstractTexture message handling
Change-Id: I5c0ff05d405766b2e0aee992ee1c150b5a0cf059 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/texture')
-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
3 files changed, 11 insertions, 63 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; }