summaryrefslogtreecommitdiffstats
path: root/src/render/jobs/filterlayerentityjob.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-06-28 10:19:24 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-07-18 10:46:47 +0000
commite295086efc8155f9d737adacb0d76f5549ca2d9c (patch)
tree8cf75c3ae31b7d1c04d27333d29bd37a971f185c /src/render/jobs/filterlayerentityjob.cpp
parentc62bc2fe1388c580ccc83cbc28e6954027aeb002 (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.cpp26
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