summaryrefslogtreecommitdiffstats
path: root/src/render/texture/texture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/texture/texture.cpp')
-rw-r--r--src/render/texture/texture.cpp87
1 files changed, 35 insertions, 52 deletions
diff --git a/src/render/texture/texture.cpp b/src/render/texture/texture.cpp
index 440a08e26..d8008b60c 100644
--- a/src/render/texture/texture.cpp
+++ b/src/render/texture/texture.cpp
@@ -117,24 +117,8 @@ void Texture::cleanup()
m_textureImageIds.clear();
// set default values
- m_properties.width = 1;
- m_properties.height = 1;
- m_properties.depth = 1;
- m_properties.layers = 1;
- m_properties.mipLevels = 1;
- m_properties.samples = 1;
- m_properties.generateMipMaps = false;
- m_properties.format = QAbstractTexture::RGBA8_UNorm;
- m_properties.target = QAbstractTexture::Target2D;
-
- m_parameters.magnificationFilter = QAbstractTexture::Nearest;
- m_parameters.minificationFilter = QAbstractTexture::Nearest;
- m_parameters.wrapModeX = QTextureWrapMode::ClampToEdge;
- m_parameters.wrapModeY = QTextureWrapMode::ClampToEdge;
- m_parameters.wrapModeZ = QTextureWrapMode::ClampToEdge;
- m_parameters.maximumAnisotropy = 1.0f;
- m_parameters.comparisonFunction = QAbstractTexture::CompareLessEqual;
- m_parameters.comparisonMode = QAbstractTexture::CompareNone;
+ m_properties = {};
+ m_parameters = {};
m_dirty = NotDirty;
}
@@ -229,80 +213,79 @@ void Texture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
BackendNode::sceneChangeEvent(e);
}
-void Texture::notifyStatus(QAbstractTexture::Status status)
+// Called by sceneChangeEvent or TextureDownloadRequest (both in AspectThread context)
+void Texture::setDataGenerator(const QTextureGeneratorPtr &generator)
{
- auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
- change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes);
- change->setPropertyName("status");
- change->setValue(status);
- notifyObservers(change);
+ m_dataFunctor = generator;
+ addDirtyFlag(DirtyDataGenerator);
}
-void Texture::updateFromData(QTextureDataPtr data)
+// Called by sendTextureChangesToFrontendJob once GLTexture and sharing
+// has been performed
+void Texture::updatePropertiesAndNotify(const TextureProperties &properties)
{
- if (data->width() != m_properties.width) {
- m_properties.width = data->width();
+ // If we are Dirty, some property has changed and the properties we have
+ // received are potentially already outdated
+ if (m_dirty != NotDirty)
+ return;
+
+ // Note we don't update target has it is constant for frontend nodes
+
+ if (properties.width != m_properties.width) {
+ m_properties.width = properties.width;
auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes);
change->setPropertyName("width");
- change->setValue(data->width());
+ change->setValue(properties.width);
notifyObservers(change);
}
- if (data->height() != m_properties.height) {
- m_properties.height = data->height();
+ if (properties.height != m_properties.height) {
+ m_properties.height = properties.height;
auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes);
change->setPropertyName("height");
- change->setValue(data->height());
+ change->setValue(properties.height);
notifyObservers(change);
}
- if (data->depth() != m_properties.depth) {
- m_properties.depth = data->depth();
+ if (properties.depth != m_properties.depth) {
+ m_properties.depth = properties.depth;
auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes);
change->setPropertyName("depth");
- change->setValue(data->depth());
+ change->setValue(properties.depth);
notifyObservers(change);
}
- if (data->layers() != m_properties.layers) {
- m_properties.layers = data->layers();
+ if (properties.layers != m_properties.layers) {
+ m_properties.layers = properties.layers;
auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes);
change->setPropertyName("layers");
- change->setValue(data->layers());
+ change->setValue(properties.layers);
notifyObservers(change);
}
- if (data->format() != m_properties.format) {
- m_properties.format = data->format();
+ if (properties.format != m_properties.format) {
+ m_properties.format = properties.format;
auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes);
change->setPropertyName("format");
- change->setValue(data->format());
+ change->setValue(properties.format);
notifyObservers(change);
}
- if (data->target() != m_properties.target) {
- // TODO frontend property is actually constant
- m_properties.target = data->target();
+ if (properties.status != m_properties.status) {
+ m_properties.status = properties.status;
auto change = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
change->setDeliveryFlags(Qt3DCore::QSceneChange::Nodes);
- change->setPropertyName("target");
- change->setValue(data->target());
+ change->setPropertyName("status");
+ change->setValue(properties.status);
notifyObservers(change);
}
}
-// Called by sceneChangeEvent or TextureDownloadRequest (both in AspectThread context)
-void Texture::setDataGenerator(const QTextureGeneratorPtr &generator)
-{
- m_dataFunctor = generator;
- addDirtyFlag(DirtyDataGenerator);
-}
-
bool Texture::isValid(TextureImageManager *manager) const
{
for (const QNodeId id : m_textureImageIds) {