summaryrefslogtreecommitdiffstats
path: root/src/render/jobs/pickboundingvolumeutils_p.h
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2021-07-29 15:19:59 +0200
committerPaul Lemire <paul.lemire@kdab.com>2021-08-09 10:22:05 +0200
commit406ea4134444a05dd89f215b3144181c0b0ce924 (patch)
tree8df7212cd2e6a1bd9c9a5f1b7817fcaeaca459bd /src/render/jobs/pickboundingvolumeutils_p.h
parente354c455f50a2d4ebc317fc805159cce43329c10 (diff)
Picking: reuse LayerFilterJob to perform layer filtering
This fixes picking for cases where multiple LayerFilters using different filter modes are present in the FrameGraph. This also reduces code duplication. Pick-to: 6.2 6.1 5.15 Change-Id: I19d0c2c5777930820ab950cbf2bfe08ef7d2484f Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render/jobs/pickboundingvolumeutils_p.h')
-rw-r--r--src/render/jobs/pickboundingvolumeutils_p.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/render/jobs/pickboundingvolumeutils_p.h b/src/render/jobs/pickboundingvolumeutils_p.h
index d9c8eee22..6a637a1d7 100644
--- a/src/render/jobs/pickboundingvolumeutils_p.h
+++ b/src/render/jobs/pickboundingvolumeutils_p.h
@@ -84,8 +84,7 @@ struct Q_AUTOTEST_EXPORT ViewportCameraAreaDetails
QRectF viewport;
QSize area;
QSurface *surface = nullptr;
- Qt3DCore::QNodeIdVector layers;
- QAbstractRayCaster::FilterMode layerFilterMode = QAbstractRayCaster::AcceptAnyMatchingLayers;
+ Qt3DCore::QNodeIdVector layersFilters;
};
QT3D_DECLARE_TYPEINFO_3(Qt3DRender, Render, PickingUtils, ViewportCameraAreaDetails, Q_COMPLEX_TYPE)
@@ -124,7 +123,8 @@ class Q_AUTOTEST_EXPORT HierarchicalEntityPicker
public:
explicit HierarchicalEntityPicker(const RayCasting::QRay3D &ray, bool requireObjectPicker = true);
- void setFilterLayers(const Qt3DCore::QNodeIdVector &layerIds, QAbstractRayCaster::FilterMode mode);
+ void setLayerFilterIds(const Qt3DCore::QNodeIdVector &layerFilterIds);
+ void setLayerIds(const Qt3DCore::QNodeIdVector &layerIds, QAbstractRayCaster::FilterMode mode);
bool collectHits(NodeManagers *manager, Entity *root);
inline HitList hits() const { return m_hits; }
@@ -136,8 +136,9 @@ private:
HitList m_hits;
std::vector<Entity *> m_entities;
bool m_objectPickersRequired;
+ Qt3DCore::QNodeIdVector m_layerFilterIds;
Qt3DCore::QNodeIdVector m_layerIds;
- QAbstractRayCaster::FilterMode m_filterMode;
+ QAbstractRayCaster::FilterMode m_layerFilterMode = QAbstractRayCaster::AcceptAnyMatchingLayers;
QHash<Qt3DCore::QNodeId, int> m_entityToPriorityTable;
};