From a85e93aa9e962aed6052eb129b29d15451558ee3 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Thu, 14 May 2015 12:43:17 +0200 Subject: RenderTexture: handle the unique flag and append the node id to the dna when set to true which makes the texture unique Change-Id: I4d7249b3021d95b31a5b93f086bc3aab54fe82da Reviewed-by: Andy Nichols --- src/render/backend/rendertexture.cpp | 14 ++++++++++++-- src/render/backend/rendertexture_p.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/render/backend/rendertexture.cpp b/src/render/backend/rendertexture.cpp index 4e9d7e2c0..92a1960d9 100644 --- a/src/render/backend/rendertexture.cpp +++ b/src/render/backend/rendertexture.cpp @@ -74,6 +74,7 @@ RenderTexture::RenderTexture() , m_isDirty(false) , m_filtersAndWrapUpdated(false) , m_dataUploadRequired(false) + , m_unique(false) , m_lock(new QMutex()) , m_textureDNA(0) , m_textureManager(Q_NULLPTR) @@ -111,6 +112,7 @@ void RenderTexture::cleanup() m_isDirty = false; m_filtersAndWrapUpdated = false; m_dataUploadRequired = false; + m_unique = false; m_textureDNA = 0; m_textureImages.clear(); m_textureManager = Q_NULLPTR; @@ -141,6 +143,7 @@ void RenderTexture::updateFromPeer(QNode *peer) m_comparisonFunction = texture->comparisonFunction(); m_comparisonMode = texture->comparisonMode(); m_layers = texture->maximumLayers(); + m_unique = texture->isUnique(); } } @@ -347,6 +350,8 @@ void RenderTexture::updateDNA() if (img) m_textureDNA += img->dna(); } + if (m_unique) // Ensures uniqueness by adding unique QNode id to the dna + m_textureDNA += qHash(peerUuid()); } // RenderThread @@ -403,7 +408,7 @@ void RenderTexture::sceneChangeEvent(const QSceneChangePtr &e) } else if (propertyChange->propertyName() == QByteArrayLiteral("depth")) { setSize(m_width, m_height, propertyChange->value().toInt()); } else if (propertyChange->propertyName() == QByteArrayLiteral("mipmaps")) { - bool oldMipMaps = m_generateMipMaps; + const bool oldMipMaps = m_generateMipMaps; m_generateMipMaps = propertyChange->value().toBool(); m_isDirty |= (oldMipMaps != m_generateMipMaps); } else if (propertyChange->propertyName() == QByteArrayLiteral("minificationFilter")) { @@ -445,9 +450,14 @@ void RenderTexture::sceneChangeEvent(const QSceneChangePtr &e) m_comparisonMode = propertyChange->value().value(); m_filtersAndWrapUpdated |= (oldComparisonMode != m_comparisonMode); } else if (propertyChange->propertyName() == QByteArrayLiteral("maximumLayers")) { - int oldLayers = m_layers; + const int oldLayers = m_layers; m_layers = propertyChange->value().toInt(); m_isDirty |= (oldLayers != m_layers); + } else if (propertyChange->propertyName() == QByteArrayLiteral("unique")) { + const bool oldUnique = m_unique; + m_unique = propertyChange->value().toBool(); + // Will force a DNA update + m_filtersAndWrapUpdated |= (oldUnique != m_unique); } } break; diff --git a/src/render/backend/rendertexture_p.h b/src/render/backend/rendertexture_p.h index d5bc1514d..052c00b36 100644 --- a/src/render/backend/rendertexture_p.h +++ b/src/render/backend/rendertexture_p.h @@ -123,6 +123,7 @@ private: bool m_filtersAndWrapUpdated; bool m_dataUploadRequired; bool m_formatWasSpecified; + bool m_unique; QMutex *m_lock; TextureDNA m_textureDNA; -- cgit v1.2.3