diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-06-28 10:19:24 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-07-18 10:46:47 +0000 |
commit | e295086efc8155f9d737adacb0d76f5549ca2d9c (patch) | |
tree | 8cf75c3ae31b7d1c04d27333d29bd37a971f185c /src/render/jobs/filterlayerentityjob.cpp | |
parent | c62bc2fe1388c580ccc83cbc28e6954027aeb002 (diff) |
LayerFiltering: move enabled filtering into job directly
Change-Id: I243cf9ff05086dc097545b62b02a4bd4deab1ef3
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/jobs/filterlayerentityjob.cpp')
-rw-r--r-- | src/render/jobs/filterlayerentityjob.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/render/jobs/filterlayerentityjob.cpp b/src/render/jobs/filterlayerentityjob.cpp index 0c3ca9e67..5e3536cf2 100644 --- a/src/render/jobs/filterlayerentityjob.cpp +++ b/src/render/jobs/filterlayerentityjob.cpp @@ -39,6 +39,7 @@ #include "filterlayerentityjob_p.h" #include <Qt3DRender/private/managers_p.h> +#include <Qt3DRender/private/nodemanagers_p.h> #include <Qt3DRender/private/entity_p.h> #include <Qt3DRender/private/job_common_p.h> @@ -65,21 +66,33 @@ FilterLayerEntityJob::FilterLayerEntityJob() void FilterLayerEntityJob::run() { + m_filteredEntities.clear(); - if (m_hasLayerFilter) // LayerFilter set -> filter + if (m_hasLayerFilter) { // LayerFilter set -> filter + LayerManager *layerManager = m_manager->layerManager(); + + // Remove layerIds which are not active/enabled + for (auto i = m_layerIds.size() - 1; i >= 0; --i) { + Layer *backendLayer = layerManager->lookupResource(m_layerIds.at(i)); + if (backendLayer == nullptr || !backendLayer->isEnabled()) + m_layerIds.removeAt(i); + } + filterLayerAndEntity(); - else // No LayerFilter set -> retrieve all + } else { // No LayerFilter set -> retrieve all selectAllEntities(); + } } // Note: we assume that m_layerIds contains only enabled layers // -> meaning that if an Entity references such a layer, it's enabled void FilterLayerEntityJob::filterLayerAndEntity() { - const QVector<HEntity> handles = m_manager->activeHandles(); + EntityManager *entityManager = m_manager->renderNodesManager(); + const QVector<HEntity> handles = entityManager->activeHandles(); for (const HEntity handle : handles) { - Entity *entity = m_manager->data(handle); + Entity *entity = entityManager->data(handle); const Qt3DCore::QNodeIdVector entityLayers = entity->componentsUuid<Layer>(); // An Entity is positively filtered if it contains at least one Layer component with the same id as the @@ -97,11 +110,12 @@ void FilterLayerEntityJob::filterLayerAndEntity() // No layer filter -> retrieve all entities void FilterLayerEntityJob::selectAllEntities() { - const QVector<HEntity> handles = m_manager->activeHandles(); + EntityManager *entityManager = m_manager->renderNodesManager(); + const QVector<HEntity> handles = entityManager->activeHandles(); m_filteredEntities.reserve(handles.size()); for (const HEntity handle : handles) - m_filteredEntities.push_back(m_manager->data(handle)); + m_filteredEntities.push_back(entityManager->data(handle)); } } // Render |