From a6712c250a677c191ab9836db880bad0af9cd82e Mon Sep 17 00:00:00 2001 From: Kelly Fennig Date: Wed, 19 Mar 2014 13:52:52 -0700 Subject: [PATCH] Created a 'buildOctreeForTheFirstTime()' function .. which adds the nodes but doesn't deal with LOD --HG-- branch : nfb --- KREngine/kraken/KRScene.cpp | 30 +++++++++++++++++++++++++++++- KREngine/kraken/KRScene.h | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/KREngine/kraken/KRScene.cpp b/KREngine/kraken/KRScene.cpp index f2ae199..8cd20f4 100644 --- a/KREngine/kraken/KRScene.cpp +++ b/KREngine/kraken/KRScene.cpp @@ -515,7 +515,6 @@ void KRScene::updateOctree(const KRViewport &viewport) if(light) { m_lights.insert(light); } - } for(std::set::iterator itr=modifiedNodes.begin(); itr != modifiedNodes.end(); itr++) { KRNode *node = *itr; @@ -530,6 +529,35 @@ void KRScene::updateOctree(const KRViewport &viewport) } } +void KRScene::buildOctreeForTheFirstTime() +{ + std::set newNodes = std::move(m_newNodes); + m_newNodes.clear(); + for(std::set::iterator itr=newNodes.begin(); itr != newNodes.end(); itr++) { + KRNode *node = *itr; + m_nodeTree.add(node); + if(node->hasPhysics()) { + m_physicsNodes.insert(node); + } + KRAmbientZone *ambientZoneNode = dynamic_cast(node); + if(ambientZoneNode) { + m_ambientZoneNodes.insert(ambientZoneNode); + } + KRReverbZone *reverbZoneNode = dynamic_cast(node); + if(reverbZoneNode) { + m_reverbZoneNodes.insert(reverbZoneNode); + } + KRLocator *locatorNode = dynamic_cast(node); + if(locatorNode) { + m_locatorNodes.insert(locatorNode); + } + KRLight *light = dynamic_cast(node); + if(light) { + m_lights.insert(light); + } + } +} + void KRScene::physicsUpdate(float deltaTime) { for(std::set::iterator itr=m_physicsNodes.begin(); itr != m_physicsNodes.end(); itr++) { diff --git a/KREngine/kraken/KRScene.h b/KREngine/kraken/KRScene.h index 7050dd4..799eab2 100644 --- a/KREngine/kraken/KRScene.h +++ b/KREngine/kraken/KRScene.h @@ -76,6 +76,7 @@ public: void render(KROctreeNode *pOctreeNode, unordered_map &visibleBounds, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass, std::vector &remainingOctrees, std::vector &remainingOctreesTestResults, std::vector &remainingOctreesTestResultsOnly, bool bOcclusionResultsPass, bool bOcclusionTestResultsOnly); void updateOctree(const KRViewport &viewport); + void buildOctreeForTheFirstTime(); void notify_sceneGraphCreate(KRNode *pNode); void notify_sceneGraphDelete(KRNode *pNode);