summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-07-20 09:10:08 +0200
committerSean Harmer <sean.harmer@kdab.com>2015-07-28 09:49:19 +0000
commit90623e3ccbeba4f498b3ce5c1b6c88f1122df434 (patch)
tree2e7a5b59b3d6830d0f0d70f1c1cec5cb6f355a9e /src/plugins
parent3fe37f854dcaa2d92e8936ccddd07800fb4d04d3 (diff)
Functors: remove dynamic_cast
Introduce a QAbstractFunctor class which QAbstractMeshFunctor and QTextureDataFunctor subclass Make all QAbstractFunctor subclasses implement an id() function (using QT3D_FUNCTOR(Class)). Use this id to compare to other QAbstractMeshFunctor and eventually static_cast into right type if possible using the functor_cast member function. Change-Id: Iface956e6cd818cbef204d8fa7bf2bc23c6ffa3f Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/sceneparsers/assimp/assimpparser.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/plugins/sceneparsers/assimp/assimpparser.cpp b/src/plugins/sceneparsers/assimp/assimpparser.cpp
index 272cc533a..351faa281 100644
--- a/src/plugins/sceneparsers/assimp/assimpparser.cpp
+++ b/src/plugins/sceneparsers/assimp/assimpparser.cpp
@@ -267,15 +267,18 @@ private:
QMeshDataPtr m_meshData;
QT3D_CLONEABLE(AssimpMesh)
- class AssimpMeshFunctor : public QAbstractMeshFunctor
- {
- public:
- explicit AssimpMeshFunctor(QMeshDataPtr meshData);
- QMeshDataPtr operator()() Q_DECL_OVERRIDE;
- bool operator ==(const QAbstractMeshFunctor &other) const Q_DECL_OVERRIDE;
- private:
- QMeshDataPtr m_meshData;
- };
+};
+
+class AssimpMeshFunctor : public QAbstractMeshFunctor
+{
+public:
+ explicit AssimpMeshFunctor(QMeshDataPtr meshData = QMeshDataPtr());
+ QMeshDataPtr operator()() Q_DECL_OVERRIDE;
+ bool operator ==(const QAbstractMeshFunctor &other) const Q_DECL_OVERRIDE;
+ QT3D_FUNCTOR(AssimpMeshFunctor)
+
+private:
+ QMeshDataPtr m_meshData;
};
class AssimpRawTextureImage : public QAbstractTextureImage
@@ -300,6 +303,7 @@ private:
TexImageDataPtr operator()() Q_DECL_FINAL;
bool operator ==(const QTextureDataFunctor &other) const Q_DECL_FINAL;
+ QT3D_FUNCTOR(AssimpRawTextureImageFunctor)
private:
QByteArray m_data;
};
@@ -917,18 +921,18 @@ QAbstractMeshFunctorPtr AssimpMesh::meshFunctor() const
return QAbstractMeshFunctorPtr(new AssimpMeshFunctor(m_meshData));
}
-AssimpMesh::AssimpMeshFunctor::AssimpMeshFunctor(QMeshDataPtr meshData)
+AssimpMeshFunctor::AssimpMeshFunctor(QMeshDataPtr meshData)
: QAbstractMeshFunctor()
, m_meshData(meshData)
{
}
-QMeshDataPtr AssimpMesh::AssimpMeshFunctor::operator()()
+QMeshDataPtr AssimpMeshFunctor::operator()()
{
return m_meshData;
}
-bool AssimpMesh::AssimpMeshFunctor::operator ==(const QAbstractMeshFunctor &) const
+bool AssimpMeshFunctor::operator ==(const QAbstractMeshFunctor &) const
{
return false;
}
@@ -966,7 +970,7 @@ TexImageDataPtr AssimpRawTextureImage::AssimpRawTextureImageFunctor::operator()(
bool AssimpRawTextureImage::AssimpRawTextureImageFunctor::operator ==(const QTextureDataFunctor &other) const
{
- const AssimpRawTextureImageFunctor *otherFunctor = dynamic_cast<const AssimpRawTextureImageFunctor *>(&other);
+ const AssimpRawTextureImageFunctor *otherFunctor = functor_cast<AssimpRawTextureImageFunctor>(&other);
return (otherFunctor != Q_NULLPTR && otherFunctor->m_data == m_data);
}
@@ -986,4 +990,6 @@ AssimpParser::SceneImporter::~SceneImporter()
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(Qt3D::AssimpMeshFunctor)
+
#include "assimpparser.moc"