diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2016-05-14 08:52:45 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-05-19 07:03:19 +0000 |
commit | 6f6207fadc1a334d1aed98f840a0d074acf18d06 (patch) | |
tree | 083bf49b4d6bc999f099b3c1e2897cb23cb89887 /src/render/geometry | |
parent | 72f2c87d15c76cc861699aea536e01bc8d56c8f2 (diff) |
De-inline dtors of public polymorphic classes
By making the destructor (usually the first non-inline, non-pure,
virtual function, and therefore the trigger for most compilers to
emit the vtable and type_info structures for the class in that TU)
out-of-line, vtables and, more importantly, type_info structures for
the class are pinned to a single TU. This prevents false negative
dynamic_cast and catch evaluation.
It also allows to add code to them later, if necessary.
Change-Id: I0da301cd788162abba6cdbbb21910090a22adb9a
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/geometry')
-rw-r--r-- | src/render/geometry/qattribute.cpp | 5 | ||||
-rw-r--r-- | src/render/geometry/qattribute.h | 1 | ||||
-rw-r--r-- | src/render/geometry/qbuffer.cpp | 7 | ||||
-rw-r--r-- | src/render/geometry/qbuffer.h | 1 | ||||
-rw-r--r-- | src/render/geometry/qgeometry.cpp | 12 | ||||
-rw-r--r-- | src/render/geometry/qgeometry.h | 1 | ||||
-rw-r--r-- | src/render/geometry/qgeometryfactory.h | 2 | ||||
-rw-r--r-- | src/render/geometry/qgeometryrenderer.cpp | 7 | ||||
-rw-r--r-- | src/render/geometry/qgeometryrenderer.h | 1 | ||||
-rw-r--r-- | src/render/geometry/qmesh.cpp | 5 | ||||
-rw-r--r-- | src/render/geometry/qmesh.h | 1 |
11 files changed, 42 insertions, 1 deletions
diff --git a/src/render/geometry/qattribute.cpp b/src/render/geometry/qattribute.cpp index 14b8f0cf1..1e9348567 100644 --- a/src/render/geometry/qattribute.cpp +++ b/src/render/geometry/qattribute.cpp @@ -148,6 +148,11 @@ QAttribute::QAttribute(QBuffer *buf, const QString &name, VertexBaseType type, u d->m_byteStride = stride; } +/*! \internal */ +QAttribute::~QAttribute() +{ +} + /*! * \property QAttribute::buffer * diff --git a/src/render/geometry/qattribute.h b/src/render/geometry/qattribute.h index 85a82317a..e6b525dc4 100644 --- a/src/render/geometry/qattribute.h +++ b/src/render/geometry/qattribute.h @@ -90,6 +90,7 @@ public: explicit QAttribute(QNode *parent = nullptr); explicit QAttribute(QBuffer *buf, VertexBaseType vertexBaseType, uint vertexSize, uint count, uint offset = 0, uint stride = 0, QNode *parent = nullptr); explicit QAttribute(QBuffer *buf, const QString &name, VertexBaseType vertexBaseType, uint vertexSize, uint count, uint offset = 0, uint stride = 0, QNode *parent = nullptr); + ~QAttribute(); QBuffer *buffer() const; QString name() const; diff --git a/src/render/geometry/qbuffer.cpp b/src/render/geometry/qbuffer.cpp index a966c5ff3..2b265f520 100644 --- a/src/render/geometry/qbuffer.cpp +++ b/src/render/geometry/qbuffer.cpp @@ -156,6 +156,13 @@ QBuffer::QBuffer(QBuffer::BufferType ty, QNode *parent) /*! * \internal */ +QBuffer::~QBuffer() +{ +} + +/*! + * \internal + */ void QBuffer::sceneChangeEvent(const QSceneChangePtr &change) { QPropertyUpdatedChangePtr e = qSharedPointerCast<QPropertyUpdatedChange>(change); diff --git a/src/render/geometry/qbuffer.h b/src/render/geometry/qbuffer.h index 19d869e9f..ba5877e6e 100644 --- a/src/render/geometry/qbuffer.h +++ b/src/render/geometry/qbuffer.h @@ -86,6 +86,7 @@ public: Q_ENUM(UsageType) explicit QBuffer(BufferType ty = QBuffer::VertexBuffer, Qt3DCore::QNode *parent = nullptr); + ~QBuffer(); UsageType usage() const; BufferType type() const; diff --git a/src/render/geometry/qgeometry.cpp b/src/render/geometry/qgeometry.cpp index c1add2866..9749faa71 100644 --- a/src/render/geometry/qgeometry.cpp +++ b/src/render/geometry/qgeometry.cpp @@ -38,6 +38,7 @@ ****************************************************************************/ #include "qgeometry.h" +#include "qgeometryfactory.h" #include "qgeometry_p.h" #include <private/qnode_p.h> #include <Qt3DRender/qattribute.h> @@ -51,6 +52,10 @@ using namespace Qt3DCore; namespace Qt3DRender { +QGeometryFactory::~QGeometryFactory() +{ +} + /*! * \qmltype Geometry * \instantiates Qt3DRender::QGeometry @@ -89,6 +94,13 @@ QGeometry::QGeometry(QNode *parent) /*! * \internal */ +QGeometry::~QGeometry() +{ +} + +/*! + * \internal + */ QGeometry::QGeometry(QGeometryPrivate &dd, QNode *parent) : QNode(dd, parent) { diff --git a/src/render/geometry/qgeometry.h b/src/render/geometry/qgeometry.h index dee254236..70fea8cd9 100644 --- a/src/render/geometry/qgeometry.h +++ b/src/render/geometry/qgeometry.h @@ -56,6 +56,7 @@ class QT3DRENDERSHARED_EXPORT QGeometry : public Qt3DCore::QNode Q_PROPERTY(Qt3DRender::QAttribute *boundingVolumePositionAttribute READ boundingVolumePositionAttribute WRITE setBoundingVolumePositionAttribute NOTIFY boundingVolumePositionAttributeChanged) public: explicit QGeometry(Qt3DCore::QNode *parent = nullptr); + ~QGeometry(); QVector<QAttribute *> attributes() const; void addAttribute(QAttribute *attribute); diff --git a/src/render/geometry/qgeometryfactory.h b/src/render/geometry/qgeometryfactory.h index b9f722844..affcc0e52 100644 --- a/src/render/geometry/qgeometryfactory.h +++ b/src/render/geometry/qgeometryfactory.h @@ -53,7 +53,7 @@ class QGeometry; class QT3DRENDERSHARED_EXPORT QGeometryFactory : public QAbstractFunctor { public: - virtual ~QGeometryFactory() {} + virtual ~QGeometryFactory(); virtual QGeometry *operator()() = 0; virtual bool operator ==(const QGeometryFactory &other) const = 0; }; diff --git a/src/render/geometry/qgeometryrenderer.cpp b/src/render/geometry/qgeometryrenderer.cpp index 2d9c5ee50..97cf4836c 100644 --- a/src/render/geometry/qgeometryrenderer.cpp +++ b/src/render/geometry/qgeometryrenderer.cpp @@ -170,6 +170,13 @@ QGeometryRenderer::QGeometryRenderer(QNode *parent) /*! * \internal */ +QGeometryRenderer::~QGeometryRenderer() +{ +} + +/*! + * \internal + */ QGeometryRenderer::QGeometryRenderer(QGeometryRendererPrivate &dd, QNode *parent) : QComponent(dd, parent) { diff --git a/src/render/geometry/qgeometryrenderer.h b/src/render/geometry/qgeometryrenderer.h index 60b769a0b..be3bb6146 100644 --- a/src/render/geometry/qgeometryrenderer.h +++ b/src/render/geometry/qgeometryrenderer.h @@ -69,6 +69,7 @@ class QT3DRENDERSHARED_EXPORT QGeometryRenderer : public Qt3DCore::QComponent public: explicit QGeometryRenderer(Qt3DCore::QNode *parent = nullptr); + ~QGeometryRenderer(); enum PrimitiveType { Points = 0x0000, diff --git a/src/render/geometry/qmesh.cpp b/src/render/geometry/qmesh.cpp index 21ceb8ba6..0d4faf2f8 100644 --- a/src/render/geometry/qmesh.cpp +++ b/src/render/geometry/qmesh.cpp @@ -108,6 +108,11 @@ QMesh::QMesh(QNode *parent) } /*! \internal */ +QMesh::~QMesh() +{ +} + +/*! \internal */ QMesh::QMesh(QMeshPrivate &dd, QNode *parent) : QGeometryRenderer(dd, parent) { diff --git a/src/render/geometry/qmesh.h b/src/render/geometry/qmesh.h index 75c4a14f6..fab76a249 100644 --- a/src/render/geometry/qmesh.h +++ b/src/render/geometry/qmesh.h @@ -62,6 +62,7 @@ class QT3DRENDERSHARED_EXPORT QMesh : public QGeometryRenderer public: explicit QMesh(Qt3DCore::QNode *parent = nullptr); + ~QMesh(); QUrl source() const; QString meshName() const; |