diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-02-20 13:54:39 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-02-27 13:00:13 +0000 |
commit | de02fcb0d47f462c4cb30bfba81d53917355ae58 (patch) | |
tree | 9ce4de8d309ef641801529d1df3e553aa7211b61 | |
parent | ce4c6534a0d3998c9aa84bec1fda6490c1020345 (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.cpp | 7 |
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) |