From 1c99c027e19750e824ab687acf744674786e786d Mon Sep 17 00:00:00 2001 From: Janne Kangas Date: Mon, 11 Feb 2019 12:16:35 +0100 Subject: [PATCH] Update visibility also for non-animating slides Force update for objects inside components and groups in non-animating slides. Change-Id: If710b8f1c7441094ab10488cac402a3098dc1df9 Task-id: QT3DS-3002 --- src/runtime/q3dsscenemanager.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp index 8b6cfbd..ba24a72 100644 --- a/src/runtime/q3dsscenemanager.cpp +++ b/src/runtime/q3dsscenemanager.cpp @@ -7665,6 +7665,8 @@ void Q3DSSceneManager::syncScene() m_subTreesWithDirtyLights.clear(); m_pendingDefMatRebuild.clear(); + setPendingVisibilities(); + updateSubTreeRecursive(m_scene); QSet needsRebuild; @@ -7728,8 +7730,6 @@ void Q3DSSceneManager::syncScene() for (Q3DSModelNode *model3DS : needsRebuild) rebuildModelMaterial(model3DS); - - setPendingVisibilities(); } void Q3DSSceneManager::setPendingVisibilities() @@ -8294,6 +8294,16 @@ void Q3DSSceneManager::updateNodeFromChangeFlags(Q3DSNode *node, Qt3DCore::QTran // use this path, that queues visibilityTag changes via // m_pendingObjectVisibility instead. setNodeVisibility(node, node->flags().testFlag(Q3DSNode::Active)); // will call updateGlobals() as well + + // Visibility changes are not cascading down to children with this explicit path, + // so recurse through them here. + if (node->type() == Q3DSGraphObject::Component || node->type() == Q3DSGraphObject::Group) { + Q3DSUipPresentation::forAllObjectsInSubTree(node, [&](Q3DSGraphObject *objOrChild) { + m_pendingObjectVisibility.remove(objOrChild); + setNodeVisibility(static_cast(objOrChild), + node->flags().testFlag(Q3DSNode::Active)); + }); + } } m_wasDirty = true; markLayerForObjectDirty(node); -- 2.10.1.windows.1