diff options
-rw-r--r-- | src/render/backend/renderer.cpp | 5 | ||||
-rw-r--r-- | src/render/texture/texture.cpp | 10 | ||||
-rw-r--r-- | src/render/texture/texture_p.h | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index 0fda6e5b4..42909d8be 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -1061,6 +1061,11 @@ void Renderer::updateGLResources() // Render Thread void Renderer::updateTexture(Texture *texture) { + // Check that the current texture images are still in place, if not, do not update + const bool isValid = texture->isValid(); + if (!isValid) + return; + // For implementing unique, non-shared, non-cached textures. // for now, every texture is shared by default diff --git a/src/render/texture/texture.cpp b/src/render/texture/texture.cpp index 8dd9ad229..13991ec4a 100644 --- a/src/render/texture/texture.cpp +++ b/src/render/texture/texture.cpp @@ -246,6 +246,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); diff --git a/src/render/texture/texture_p.h b/src/render/texture/texture_p.h index f99d1d38b..4fe4e2c7c 100644 --- a/src/render/texture/texture_p.h +++ b/src/render/texture/texture_p.h @@ -157,6 +157,7 @@ public: inline const QVector<HTextureImage>& textureImages() const { return m_textureImages; } inline const QTextureGeneratorPtr& dataGenerator() const { return m_dataFunctor; } + bool isValid() const; private: void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL; |