summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-05-14 12:42:37 +0200
committerPaul Lemire <paul.lemire@kdab.com>2015-05-15 08:00:50 +0000
commit6cb62485394e49791d2ea35dc3a59926df271f0d (patch)
tree03067167b122aca90b7ad156107c3f87653326c2
parent4b42d218cada780a3ff5716b41c9f26f5b2d2d6b (diff)
QAbstractTextureProvider add unique property
Will allow to disable texture sharing in the backend when needed, defaults to false Change-Id: If3a75c7763db6eb479319d5c0b9356b164e0f163 Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/core/nodes/qnodeid.h3
-rw-r--r--src/render/frontend/qabstracttextureprovider.cpp49
-rw-r--r--src/render/frontend/qabstracttextureprovider.h5
-rw-r--r--src/render/frontend/qabstracttextureprovider_p.h1
4 files changed, 54 insertions, 4 deletions
diff --git a/src/core/nodes/qnodeid.h b/src/core/nodes/qnodeid.h
index 77ea96ff3..ec1e6ce07 100644
--- a/src/core/nodes/qnodeid.h
+++ b/src/core/nodes/qnodeid.h
@@ -92,8 +92,9 @@ private:
QT3DCORESHARED_EXPORT QDebug operator<<(QDebug d, const QNodeId &id);
#endif
-inline uint qHash(const QNodeId &id, uint) Q_DECL_NOTHROW
+inline uint qHash(const QNodeId &id, uint seed = 0) Q_DECL_NOTHROW
{
+ Q_UNUSED(seed);
return id.id();
}
diff --git a/src/render/frontend/qabstracttextureprovider.cpp b/src/render/frontend/qabstracttextureprovider.cpp
index 549332c0c..cafe2861c 100644
--- a/src/render/frontend/qabstracttextureprovider.cpp
+++ b/src/render/frontend/qabstracttextureprovider.cpp
@@ -62,6 +62,7 @@ QAbstractTextureProviderPrivate::QAbstractTextureProviderPrivate(QAbstractTextur
, m_comparisonFunction(QAbstractTextureProvider::CompareLessEqual)
, m_comparisonMode(QAbstractTextureProvider::CompareNone)
, m_maximumLayers(1)
+ , m_unique(false)
{
}
@@ -126,9 +127,9 @@ QAbstractTextureProvider::~QAbstractTextureProvider()
*/
void QAbstractTextureProvider::setSize(int w, int h, int d)
{
- setWidth(w);
- setHeight(h);
- setDepth(d);
+ setWidth(w);
+ setHeight(h);
+ setDepth(d);
}
/*!
@@ -209,6 +210,12 @@ void QAbstractTextureProvider::setMaximumLayers(int maximumLayers)
}
}
+/*!
+ Returns the maximum number of layers for the texture provider.
+
+ \note this has a meaning only for texture providers that have 3D or
+ array target formats.
+ */
int QAbstractTextureProvider::maximumLayers() const
{
Q_D(const QAbstractTextureProvider);
@@ -216,6 +223,39 @@ int QAbstractTextureProvider::maximumLayers() const
}
/*!
+ \property Qt3D::QAbstractTextureProvider::unique
+
+ Sets whether this texture provider should be unique by reading \a unique.
+ By default this is false.
+
+ By default the renderer based on the attributes of texture providers is
+ able to compare them and detect duplicates (same size, format and image
+ sources) and smartly avoid unnecessary computations. In some cases however
+ (texture providers used as Qt3D::RenderTarget attachments) you don't want
+ the renderer to perform these comparison, in which case you can set is
+ unique to true.
+ */
+void QAbstractTextureProvider::setUnique(bool unique)
+{
+ Q_D(QAbstractTextureProvider);
+ if (d->m_unique != unique) {
+ d->m_unique = unique;
+ emit uniqueChanged();
+ }
+}
+
+/*!
+ Returns whether the texture should be shared with other textures in the
+ renderer or not. Defaults to false as this allow in most cases the renderer
+ to be faster.
+ */
+bool QAbstractTextureProvider::isUnique() const
+{
+ Q_D(const QAbstractTextureProvider);
+ return d->m_unique;
+}
+
+/*!
\property Qt3D::QAbstractTextureProvider::format
Holds the format of the texture provider.
@@ -229,6 +269,9 @@ void QAbstractTextureProvider::setFormat(TextureFormat format)
}
}
+/*!
+ Return the texture provider's format.
+ */
QAbstractTextureProvider::TextureFormat QAbstractTextureProvider::format() const
{
Q_D(const QAbstractTextureProvider);
diff --git a/src/render/frontend/qabstracttextureprovider.h b/src/render/frontend/qabstracttextureprovider.h
index b8cad3b6e..025270cd5 100644
--- a/src/render/frontend/qabstracttextureprovider.h
+++ b/src/render/frontend/qabstracttextureprovider.h
@@ -66,6 +66,7 @@ class QT3DRENDERERSHARED_EXPORT QAbstractTextureProvider : public QNode
Q_PROPERTY(ComparisonFunction comparisonFunction READ comparisonFunction WRITE setComparisonFunction NOTIFY comparisonFunctionChanged)
Q_PROPERTY(ComparisonMode comparisonMode READ comparisonMode WRITE setComparisonMode NOTIFY comparisonModeChanged)
Q_PROPERTY(int maximumLayers READ maximumLayers WRITE setMaximumLayers NOTIFY maximumLayersChanged)
+ Q_PROPERTY(bool unique READ isUnique WRITE setUnique NOTIFY uniqueChanged)
public:
@@ -296,6 +297,9 @@ public:
void setMaximumLayers(int maximumLayers);
int maximumLayers() const;
+ void setUnique(bool unique);
+ bool isUnique() const;
+
Q_SIGNALS:
void formatChanged();
void statusChanged();
@@ -309,6 +313,7 @@ Q_SIGNALS:
void comparisonFunctionChanged();
void comparisonModeChanged();
void maximumLayersChanged();
+ void uniqueChanged();
protected:
explicit QAbstractTextureProvider(QNode *parent = 0);
diff --git a/src/render/frontend/qabstracttextureprovider_p.h b/src/render/frontend/qabstracttextureprovider_p.h
index d1d8eb982..c3fafb402 100644
--- a/src/render/frontend/qabstracttextureprovider_p.h
+++ b/src/render/frontend/qabstracttextureprovider_p.h
@@ -69,6 +69,7 @@ public :
QAbstractTextureProvider::ComparisonMode m_comparisonMode;
QList<QAbstractTextureImage *> m_textureImages;
int m_maximumLayers;
+ bool m_unique;
};
} // QT3D