diff options
Diffstat (limited to 'src/render/texture/texture.cpp')
-rw-r--r-- | src/render/texture/texture.cpp | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/src/render/texture/texture.cpp b/src/render/texture/texture.cpp index 749b85802..17fd47be3 100644 --- a/src/render/texture/texture.cpp +++ b/src/render/texture/texture.cpp @@ -115,6 +115,7 @@ void Texture::cleanup() // texture is being referenced by a shared API specific texture (GLTexture) m_dataFunctor.reset(); m_textureImageIds.clear(); + m_sharedTextureId = -1; // set default values m_properties = {}; @@ -181,6 +182,9 @@ void Texture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) dirty = DirtyProperties; } else if (propertyChange->propertyName() == QByteArrayLiteral("generator")) { setDataGenerator(propertyChange->value().value<QTextureGeneratorPtr>()); + } else if (propertyChange->propertyName() == QByteArrayLiteral("textureId")) { + m_sharedTextureId = propertyChange->value().toInt(); + dirty = DirtySharedTextureId; } } break; @@ -219,7 +223,7 @@ void Texture::setDataGenerator(const QTextureGeneratorPtr &generator) // Called by sendTextureChangesToFrontendJob once GLTexture and sharing // has been performed -void Texture::updatePropertiesAndNotify(const TextureProperties &properties) +void Texture::updatePropertiesAndNotify(const TextureUpdateInfo &updateInfo) { // If we are Dirty, some property has changed and the properties we have // received are potentially already outdated @@ -228,57 +232,73 @@ void Texture::updatePropertiesAndNotify(const TextureProperties &properties) // Note we don't update target has it is constant for frontend nodes - if (properties.width != m_properties.width) { - m_properties.width = properties.width; + if (updateInfo.properties.width != m_properties.width) { + m_properties.width = updateInfo.properties.width; auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); change->setPropertyName("width"); - change->setValue(properties.width); + change->setValue(updateInfo.properties.width); notifyObservers(change); } - if (properties.height != m_properties.height) { - m_properties.height = properties.height; + if (updateInfo.properties.height != m_properties.height) { + m_properties.height = updateInfo.properties.height; auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); change->setPropertyName("height"); - change->setValue(properties.height); + change->setValue(updateInfo.properties.height); notifyObservers(change); } - if (properties.depth != m_properties.depth) { - m_properties.depth = properties.depth; + if (updateInfo.properties.depth != m_properties.depth) { + m_properties.depth = updateInfo.properties.depth; auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); change->setPropertyName("depth"); - change->setValue(properties.depth); + change->setValue(updateInfo.properties.depth); notifyObservers(change); } - if (properties.layers != m_properties.layers) { - m_properties.layers = properties.layers; + if (updateInfo.properties.layers != m_properties.layers) { + m_properties.layers = updateInfo.properties.layers; auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); change->setPropertyName("layers"); - change->setValue(properties.layers); + change->setValue(updateInfo.properties.layers); notifyObservers(change); } - if (properties.format != m_properties.format) { - m_properties.format = properties.format; + if (updateInfo.properties.format != m_properties.format) { + m_properties.format = updateInfo.properties.format; auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); change->setPropertyName("format"); - change->setValue(properties.format); + change->setValue(updateInfo.properties.format); notifyObservers(change); } - if (properties.status != m_properties.status) { - m_properties.status = properties.status; + if (updateInfo.properties.status != m_properties.status) { + m_properties.status = updateInfo.properties.status; auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); change->setPropertyName("status"); - change->setValue(properties.status); + change->setValue(updateInfo.properties.status); + notifyObservers(change); + } + + { + auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); + change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); + change->setPropertyName("handleType"); + change->setValue(updateInfo.handleType); + notifyObservers(change); + } + + { + auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); + change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes); + change->setPropertyName("handle"); + change->setValue(updateInfo.handle); notifyObservers(change); } } @@ -315,11 +335,14 @@ void Texture::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &chan m_parameters.comparisonFunction = data.comparisonFunction; m_parameters.comparisonMode = data.comparisonMode; m_dataFunctor = data.dataFunctor; + m_sharedTextureId = data.sharedTextureId; for (const QNodeId imgId : data.textureImageIds) addTextureImage(imgId); addDirtyFlag(DirtyFlags(DirtyImageGenerators|DirtyProperties|DirtyParameters)); + if (m_sharedTextureId > 0) + addDirtyFlag(DirtySharedTextureId); } |