From 2c96296936685ffe583d7575763612fc667b16d8 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 8 Aug 2013 16:08:06 -0700 Subject: [PATCH] fixed LOD disappear on backing up --- interface/src/VoxelSystem.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 2197b1b1bb..5351f129be 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -390,14 +390,29 @@ int VoxelSystem::newTreeToArrays(VoxelNode* node) { bool shouldRender = false; // assume we don't need to render it // if it's colored, we might need to render it! shouldRender = node->calculateShouldRender(Application::getInstance()->getViewFrustum()); + node->setShouldRender(shouldRender); // let children figure out their renderness if (!node->isLeaf()) { + + // As we check our children, see if any of them went from shouldRender to NOT shouldRender + // then we probably dropped LOD and if we don't have color, we want to average our children + // for a new color. + int childrenGotHiddenCount = 0; for (int i = 0; i < NUMBER_OF_CHILDREN; i++) { - if (node->getChildAtIndex(i)) { - voxelsUpdated += newTreeToArrays(node->getChildAtIndex(i)); + VoxelNode* childNode = node->getChildAtIndex(i); + if (childNode) { + bool wasShouldRender = childNode->getShouldRender(); + voxelsUpdated += newTreeToArrays(childNode); + bool isShouldRender = childNode->getShouldRender(); + if (wasShouldRender && !isShouldRender) { + childrenGotHiddenCount++; + } } } + if (childrenGotHiddenCount > 0) { + node->setColorFromAverageOfChildren(); + } } if (_writeRenderFullVBO) { voxelsUpdated += updateNodeInArraysAsFullVBO(node);