diff options
author | Wieland Hagen <wieland.hagen@kdab.com> | 2016-07-05 19:17:55 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-11-14 13:55:35 +0000 |
commit | a5c4c4fc8f12f9d58ba0abfb616cbf27e8b1593a (patch) | |
tree | ed204723105b40bb1b26170e8cf0ae0e151aa123 /src/render/texture/textureimage.cpp | |
parent | 3ec98c7990f70013e6ae3c1f0df66456de6c1da7 (diff) |
Texture backend refactoring: Simplify TextureImage
TextureImage will basically just hold the frontend data and notify
the texture holding it about changes.
Change-Id: I2f4bc18a8b667cd4036d02250574e88831498035
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/texture/textureimage.cpp')
-rw-r--r-- | src/render/texture/textureimage.cpp | 109 |
1 files changed, 19 insertions, 90 deletions
diff --git a/src/render/texture/textureimage.cpp b/src/render/texture/textureimage.cpp index 7e2ac6277..91eb288f2 100644 --- a/src/render/texture/textureimage.cpp +++ b/src/render/texture/textureimage.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt3D module of the Qt Toolkit. @@ -39,9 +39,8 @@ #include "textureimage_p.h" #include <Qt3DCore/qpropertyupdatedchange.h> -#include <Qt3DRender/qtextureimagedatagenerator.h> +#include <Qt3DRender/qtextureimage.h> #include <Qt3DRender/private/managers_p.h> -#include <Qt3DRender/private/texturedatamanager_p.h> #include <Qt3DRender/private/qabstracttextureimage_p.h> QT_BEGIN_NAMESPACE @@ -56,27 +55,16 @@ TextureImage::TextureImage() , m_layer(0) , m_mipLevel(0) , m_face(QAbstractTexture::CubeMapPositiveX) - , m_dirty(true) , m_textureManager(nullptr) - , m_textureImageManager(nullptr) - , m_textureDataManager(nullptr) - , m_dna(0) +{ +} + +TextureImage::~TextureImage() { } void TextureImage::cleanup() { - QBackendNode::setEnabled(false); - m_layer = 0; - m_mipLevel = 0; - m_dirty = true; - m_face = QAbstractTexture::CubeMapPositiveX; - m_generator.reset(); - m_textureManager = nullptr; - m_textureImageManager = nullptr; - m_textureDataManager = nullptr; - m_referencedTextures.clear(); - m_dna = 0; } void TextureImage::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) @@ -89,15 +77,14 @@ void TextureImage::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr m_generator = data.generator; if (!change->parentId()) { - qWarning() << "No QAbstractTextureProvider parent found"; + qWarning() << "No QAbstractTexture parent found"; } else { - m_textureProviderId = change->parentId(); - m_textureProvider = m_textureManager->lookupHandle(m_textureProviderId); + const QNodeId id = change->parentId(); + m_textureProvider = m_textureManager->lookupHandle(id); Texture *texture = m_textureManager->data(m_textureProvider); Q_ASSERT(texture); // Notify the Texture that it has a new TextureImage and needs an update - texture->addTextureImageData(m_textureImageManager->lookupHandle(peerId())); - texture->addToPendingTextureJobs(); + texture->addTextureImage(peerId()); } } @@ -105,27 +92,23 @@ void TextureImage::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) { QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e); - const bool wasDirty = m_dirty; if (e->type() == PropertyUpdated) { if (propertyChange->propertyName() == QByteArrayLiteral("layer")) { m_layer = propertyChange->value().toInt(); - m_dirty = true; } else if (propertyChange->propertyName() == QByteArrayLiteral("mipLevel")) { m_mipLevel = propertyChange->value().toInt(); - m_dirty = true; } else if (propertyChange->propertyName() == QByteArrayLiteral("face")) { m_face = static_cast<QAbstractTexture::CubeMapFace>(propertyChange->value().toInt()); - m_dirty = true; } else if (propertyChange->propertyName() == QByteArrayLiteral("dataGenerator")) { m_generator = propertyChange->value().value<QTextureImageDataGeneratorPtr>(); - m_dirty = true; } - } - if (!wasDirty && wasDirty != m_dirty) { // Notify the Texture that we were updated and request it to schedule an update job + + // Notify the Texture that we were updated and request it to schedule an update job Texture *txt = m_textureManager->data(m_textureProvider); if (txt != nullptr) - txt->addToPendingTextureJobs(); + txt->addDirtyFlag(Texture::Generators); } + markDirty(AbstractRenderer::AllDirty); BackendNode::sceneChangeEvent(e); } @@ -135,64 +118,12 @@ void TextureImage::setTextureManager(TextureManager *manager) m_textureManager = manager; } -void TextureImage::setTextureImageManager(TextureImageManager *manager) -{ - m_textureImageManager = manager; -} - -void TextureImage::setTextureDataManager(TextureDataManager *manager) -{ - m_textureDataManager = manager; -} - -void TextureImage::unsetDirty() -{ - m_dirty = false; -} - -// Called by LoadDataTextureJob when the texture data has been successfully load -void TextureImage::setTextureDataHandle(HTextureData handle) -{ - m_textureDataHandle = handle; -} - -void TextureImage::setStatus(QTextureImage::Status status) -{ - // Notify the frontend - auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); - e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); - e->setPropertyName("status"); - e->setValue(status); - notifyObservers(e); -} - -union DNABuilder { - quint64 dna; - quint32 dataHash; - quint16 layer; - quint8 face; - quint8 mipLevel; -}; - -void TextureImage::updateDNA(quint32 dataHash) -{ - // 64 bits [ 32 bits data ] [ 16 bits layer ] [ 8 bits mip level ] [ 8 bits face ] - DNABuilder builder; - builder.dataHash = dataHash; - builder.layer = m_layer; - builder.face = m_face; - builder.mipLevel = m_mipLevel; - - m_dna = builder.dna; -} - -TextureImageFunctor::TextureImageFunctor(AbstractRenderer *renderer, TextureManager *textureManager, - TextureImageManager *textureImageManager, - TextureDataManager *textureDataManager) - : m_textureManager(textureManager) +TextureImageFunctor::TextureImageFunctor(AbstractRenderer *renderer, + TextureManager *textureManager, + TextureImageManager *textureImageManager) + : m_renderer(renderer) + , m_textureManager(textureManager) , m_textureImageManager(textureImageManager) - , m_textureDataManager(textureDataManager) - , m_renderer(renderer) { } @@ -200,8 +131,6 @@ Qt3DCore::QBackendNode *TextureImageFunctor::create(const Qt3DCore::QNodeCreated { TextureImage *backend = m_textureImageManager->getOrCreateResource(change->subjectId()); backend->setTextureManager(m_textureManager); - backend->setTextureImageManager(m_textureImageManager); - backend->setTextureDataManager(m_textureDataManager); backend->setRenderer(m_renderer); return backend; } |