summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2019-02-20 13:54:39 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2019-02-27 13:00:13 +0000
commitde02fcb0d47f462c4cb30bfba81d53917355ae58 (patch)
tree9ce4de8d309ef641801529d1df3e553aa7211b61
parentce4c6534a0d3998c9aa84bec1fda6490c1020345 (diff)
Force light gathering on pending light visibility change on size update
If there is a pending light visibility change when Q3DSSceneManager::updateSizes is called, lights must be re-gathered or Q3DSSceneManager::updateShadowMapStatus will assert as there are currently inactive lights in layerData->lightsData->lightNodes. Task-number: QT3DS-3066 Change-Id: Ic721715cd4fe4e640a9ce097b660df662ee0ee6d Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Janne Kangas <janne.kangas@qt.io> Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r--src/runtime/q3dsscenemanager.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp
index 8dc7aa2..0b307b9 100644
--- a/src/runtime/q3dsscenemanager.cpp
+++ b/src/runtime/q3dsscenemanager.cpp
@@ -573,6 +573,13 @@ void Q3DSSceneManager::updateSizes(const QSize &size, qreal dpr, const QRect &vi
data->frameDirty = Q3DSGraphObjectAttached::TextDirty;
data->frameChangeFlags |= Q3DSTextNode::TextureImageDepChanges;
}
+ } else if (obj->type() == Q3DSGraphObject::Light) {
+ // Force gathering of lights if there is a pending light visibility change
+ auto data = obj->attached<Q3DSNodeAttached>();
+ if (data->frameChangeFlags & Q3DSNode::EyeballChanges && data->layer3DS) {
+ auto layerData = data->layer3DS->attached<Q3DSLayerAttached>();
+ layerData->frameChangeFlags |= Q3DSLayerNode::LayerContentSubTreeLightsChange;
+ }
}
});
if (forceTreeVisit)