summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-05-14 12:43:17 +0200
committerPaul Lemire <paul.lemire@kdab.com>2015-05-15 08:00:58 +0000
commita85e93aa9e962aed6052eb129b29d15451558ee3 (patch)
tree3317a371e6318018b223d3ae6013f5159667966e
parent6cb62485394e49791d2ea35dc3a59926df271f0d (diff)
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 <andy.nichols@theqtcompany.com>
-rw-r--r--src/render/backend/rendertexture.cpp14
-rw-r--r--src/render/backend/rendertexture_p.h1
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<QAbstractTextureProvider::ComparisonMode>();
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;