summaryrefslogtreecommitdiffstats
path: root/src/render/geometry
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2016-05-14 08:52:45 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-05-19 07:03:19 +0000
commit6f6207fadc1a334d1aed98f840a0d074acf18d06 (patch)
tree083bf49b4d6bc999f099b3c1e2897cb23cb89887 /src/render/geometry
parent72f2c87d15c76cc861699aea536e01bc8d56c8f2 (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.cpp5
-rw-r--r--src/render/geometry/qattribute.h1
-rw-r--r--src/render/geometry/qbuffer.cpp7
-rw-r--r--src/render/geometry/qbuffer.h1
-rw-r--r--src/render/geometry/qgeometry.cpp12
-rw-r--r--src/render/geometry/qgeometry.h1
-rw-r--r--src/render/geometry/qgeometryfactory.h2
-rw-r--r--src/render/geometry/qgeometryrenderer.cpp7
-rw-r--r--src/render/geometry/qgeometryrenderer.h1
-rw-r--r--src/render/geometry/qmesh.cpp5
-rw-r--r--src/render/geometry/qmesh.h1
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;