diff options
author | Mike Krus <mike.krus@kdab.com> | 2020-11-18 12:29:48 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2020-11-22 11:41:52 +0000 |
commit | c5845d67be03d0f1f538422ba1ad181442b09819 (patch) | |
tree | 68c22ba64e3faa5a6a106e6529f663e605c67f26 /src/render | |
parent | a8a212ebbd82bad183aff0bc53d851c66c7fd225 (diff) |
Introduce QGeometryRendererPrivate::sortIndex
Lets user override the sorting order of entities.
Change-Id: Iab7fd0d705f7ddcb424a59f86f8c2c28059813d1
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
(cherry picked from commit c6aec09f4f6030fa11b9ba911e4c0df2fe7485b2)
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/geometry/geometryrenderer.cpp | 5 | ||||
-rw-r--r-- | src/render/geometry/geometryrenderer_p.h | 3 | ||||
-rw-r--r-- | src/render/geometry/qgeometryrenderer.cpp | 24 | ||||
-rw-r--r-- | src/render/geometry/qgeometryrenderer_p.h | 1 |
4 files changed, 32 insertions, 1 deletions
diff --git a/src/render/geometry/geometryrenderer.cpp b/src/render/geometry/geometryrenderer.cpp index 881c0f66b..ff7ed308f 100644 --- a/src/render/geometry/geometryrenderer.cpp +++ b/src/render/geometry/geometryrenderer.cpp @@ -71,6 +71,7 @@ GeometryRenderer::GeometryRenderer() , m_primitiveType(QGeometryRenderer::Triangles) , m_dirty(false) , m_manager(nullptr) + , m_sortIndex(-1.f) { } @@ -96,6 +97,7 @@ void GeometryRenderer::cleanup() m_geometryFactory.reset(); qDeleteAll(m_triangleVolumes); m_triangleVolumes.clear(); + m_sortIndex = -1.f; } void GeometryRenderer::setManager(GeometryRendererManager *manager) @@ -151,6 +153,9 @@ void GeometryRenderer::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) } } + const auto dnode = static_cast<const QGeometryRendererPrivate*>(QGeometryRendererPrivate::get(node)); + m_sortIndex = dnode->m_sortIndex; + markDirty(AbstractRenderer::GeometryDirty); } diff --git a/src/render/geometry/geometryrenderer_p.h b/src/render/geometry/geometryrenderer_p.h index a38233d6c..411845819 100644 --- a/src/render/geometry/geometryrenderer_p.h +++ b/src/render/geometry/geometryrenderer_p.h @@ -104,6 +104,8 @@ public: // Pick volumes job QVector<RayCasting::QBoundingVolume *> triangleData() const; + float sortIndex() const { return m_sortIndex; } + private: Qt3DCore::QNodeId m_geometryId; int m_instanceCount; @@ -120,6 +122,7 @@ private: QGeometryFactoryPtr m_geometryFactory; GeometryRendererManager *m_manager; QVector<RayCasting::QBoundingVolume *> m_triangleVolumes; + float m_sortIndex; }; class GeometryRendererFunctor : public Qt3DCore::QBackendNodeMapper diff --git a/src/render/geometry/qgeometryrenderer.cpp b/src/render/geometry/qgeometryrenderer.cpp index 8720a5c00..7abbe8db8 100644 --- a/src/render/geometry/qgeometryrenderer.cpp +++ b/src/render/geometry/qgeometryrenderer.cpp @@ -48,6 +48,28 @@ using namespace Qt3DCore; namespace Qt3DRender { +/* + \internal + + sortIndex property: overrides the sorting index when depth sorting is enabled. + + If depth sorting is enabled on the frame graph, the renderer will sort + objects based on how far the center of the bounding volume is from + the camera and render objects from the furthest to the closest. + + This property can be used to override the depth index and precisely + control the order in which objects are rendered. This is useful when + all objects are at the same physical distance from the camera. + + The actual values are not significant, only that they define an order + to sort the objects. These are sorted such as the object with the + smallest value is drawn first, then the second smallest, and so on. + + \note Setting this to -1.f will disable the explicit sorting for this + entity and revert to using the distance from the center of the bounding + volume. +*/ + QGeometryRendererPrivate::QGeometryRendererPrivate() : QComponentPrivate() , m_instanceCount(1) @@ -61,6 +83,7 @@ QGeometryRendererPrivate::QGeometryRendererPrivate() , m_primitiveRestart(false) , m_geometry(nullptr) , m_primitiveType(QGeometryRenderer::Triangles) + , m_sortIndex(-1.f) { } @@ -194,7 +217,6 @@ QGeometryRendererPrivate::~QGeometryRendererPrivate() \sa Qt3DRender::QGeometryRenderer::PrimitiveType */ - /*! Constructs a new QGeometryRenderer with \a parent. */ diff --git a/src/render/geometry/qgeometryrenderer_p.h b/src/render/geometry/qgeometryrenderer_p.h index 32ca334e3..323ab786c 100644 --- a/src/render/geometry/qgeometryrenderer_p.h +++ b/src/render/geometry/qgeometryrenderer_p.h @@ -82,6 +82,7 @@ public: QGeometry *m_geometry; QGeometryRenderer::PrimitiveType m_primitiveType; QGeometryFactoryPtr m_geometryFactory; + float m_sortIndex; }; struct QGeometryRendererData |