diff --git a/KREngine/kraken/KRLODSet.cpp b/KREngine/kraken/KRLODSet.cpp index d056e30..cc37fe0 100644 --- a/KREngine/kraken/KRLODSet.cpp +++ b/KREngine/kraken/KRLODSet.cpp @@ -106,8 +106,19 @@ void KRLODSet::showLOD() kraken_stream_level KRLODSet::getStreamLevel(bool prime, const KRViewport &viewport) { - if(m_activeLODGroup) { - return m_activeLODGroup->getStreamLevel(prime, viewport); + KRLODGroup *new_active_lod_group = NULL; + + // Upgrade and downgrade LOD groups as needed + for(std::set::iterator itr=m_childNodes.begin(); itr != m_childNodes.end(); ++itr) { + KRLODGroup *lod_group = dynamic_cast(*itr); + assert(lod_group != NULL); + if(lod_group->getLODVisibility(viewport)) { + new_active_lod_group = lod_group; + } + } + + if(new_active_lod_group) { + return new_active_lod_group->getStreamLevel(prime, viewport); } else { return kraken_stream_level::STREAM_LEVEL_IN_HQ; } diff --git a/KREngine/kraken/KRTexture.cpp b/KREngine/kraken/KRTexture.cpp index 5ce80d6..062d52f 100644 --- a/KREngine/kraken/KRTexture.cpp +++ b/KREngine/kraken/KRTexture.cpp @@ -124,8 +124,10 @@ kraken_stream_level KRTexture::getStreamLevel(bool prime, float lodCoverage, KRT return kraken_stream_level::STREAM_LEVEL_OUT; } else if(m_current_lod_max_dim == KRMIN(getContext().KRENGINE_MAX_TEXTURE_DIM, m_max_lod_max_dim)) { return kraken_stream_level::STREAM_LEVEL_IN_HQ; - } else { + } else if(m_current_lod_max_dim >= KRMAX(getContext().KRENGINE_MIN_TEXTURE_DIM, m_min_lod_max_dim)) { return kraken_stream_level::STREAM_LEVEL_IN_LQ; + } else { + return kraken_stream_level::STREAM_LEVEL_OUT; } }