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.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/render/texture/texture.cpp b/src/render/texture/texture.cpp
index 863733523..21f29d0b6 100644
--- a/src/render/texture/texture.cpp
+++ b/src/render/texture/texture.cpp
@@ -61,7 +61,7 @@ namespace Render {
Texture::Texture()
// We need backend -> frontend notifications to update the status of the texture
: BackendNode(ReadWrite)
- , m_dirty(DirtyGenerators|DirtyProperties|DirtyParameters)
+ , m_dirty(DirtyImageGenerators|DirtyProperties|DirtyParameters|DirtyDataGenerator)
, m_textureImageManager(nullptr)
{
}
@@ -81,11 +81,19 @@ void Texture::setTextureImageManager(TextureImageManager *manager)
void Texture::addDirtyFlag(DirtyFlags flags)
{
+ QMutexLocker lock(&m_flagsMutex);
m_dirty |= flags;
}
+Texture::DirtyFlags Texture::dirtyFlags()
+{
+ QMutexLocker lock(&m_flagsMutex);
+ return m_dirty;
+}
+
void Texture::unsetDirty()
{
+ QMutexLocker lock(&m_flagsMutex);
m_dirty = Texture::NotDirty;
}
@@ -101,7 +109,7 @@ void Texture::addTextureImage(Qt3DCore::QNodeId id)
qWarning() << "[Qt3DRender::TextureNode] addTextureImage: image handle is NULL";
} else if (!m_textureImages.contains(handle)) {
m_textureImages << handle;
- addDirtyFlag(DirtyGenerators);
+ addDirtyFlag(DirtyImageGenerators);
}
}
@@ -117,7 +125,7 @@ void Texture::removeTextureImage(Qt3DCore::QNodeId id)
qWarning() << "[Qt3DRender::TextureNode] removeTextureImage: image handle is NULL";
} else {
m_textureImages.removeAll(handle);
- addDirtyFlag(DirtyGenerators);
+ addDirtyFlag(DirtyImageGenerators);
}
}
@@ -214,7 +222,7 @@ void Texture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
dirty = DirtyProperties;
} else if (propertyChange->propertyName() == QByteArrayLiteral("generator")) {
m_dataFunctor = propertyChange->value().value<QTextureGeneratorPtr>();
- dirty = DirtyGenerators;
+ dirty = DirtyDataGenerator;
}
}
break;
@@ -246,6 +254,16 @@ void Texture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
BackendNode::sceneChangeEvent(e);
}
+bool Texture::isValid() const
+{
+ for (const auto handle : m_textureImages) {
+ TextureImage *img = m_textureImageManager->data(handle);
+ if (img == nullptr)
+ return false;
+ }
+ return true;
+}
+
void Texture::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
{
const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QAbstractTextureData>>(change);
@@ -269,7 +287,7 @@ void Texture::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &chan
m_parameters.comparisonMode = data.comparisonMode;
m_dataFunctor = data.dataFunctor;
- addDirtyFlag(DirtyFlags(DirtyGenerators|DirtyProperties|DirtyParameters));
+ addDirtyFlag(DirtyFlags(DirtyImageGenerators|DirtyProperties|DirtyParameters));
}