dna/LODConstraint.cpp dna/LODConstraint.h dna/utils/Extd.h cstddef cstdint numeric dna //CopyrightEpicGames,Inc.AllRightsReserved. #include"dna/LODConstraint.h" #include"dna/utils/Extd.h" #ifdef_MSC_VER #pragmawarning(push) #pragmawarning(disable:43654987) #endif #include<cstddef> #include<cstdint> #include<numeric> #ifdef_MSC_VER #pragmawarning(pop) #endif namespacedna{ LODConstraint::LODConstraint(std::uint16_tmaxLOD,std::uint16_tminLOD,MemoryResource*memRes):lods{memRes}{ assert(maxLOD<=minLOD); lods.resize(static_cast<std::size_t>(minLOD-maxLOD)+1ul); std::iota(lods.begin(),lods.end(),maxLOD); } LODConstraint::LODConstraint(ConstArrayView<std::uint16_t>lods_,MemoryResource*memRes):lods{lods_.begin(),lods_.end(), memRes}{ std::sort(lods.begin(),lods.end()); } boolLODConstraint::hasImpactOn(std::uint16_tlodCount)const{ std::uint16_tlod={}; for(autoit=lods.begin();(it!=lods.end())&&(lod<lodCount);++it){ lod=static_cast<std::uint16_t>(lod+static_cast<std::uint16_t>(lod==*it)); } return(lod!=lodCount); } std::uint16_tLODConstraint::getMaxLOD()const{ return(lods.empty()?std::uint16_t{}:lods.front()); } std::uint16_tLODConstraint::getMinLOD()const{ return(lods.empty()?std::uint16_t{}:lods.back()); } std::uint16_tLODConstraint::getLODCount()const{ returnstatic_cast<std::uint16_t>(lods.size()); } voidLODConstraint::clampTo(std::uint16_tlodCount){ extd::filter(lods,[lodCount](std::uint16_tlod,std::size_t/*unused*/){ returnlod<lodCount; }); } voidLODConstraint::applyTo(Vector<std::uint16_t>&unconstrainedLODs)const{ extd::filter(unconstrainedLODs,extd::byPosition(lods)); } voidLODConstraint::applyTo(DynArray<std::uint16_t>&unconstrainedLODs)const{ extd::filter(unconstrainedLODs,extd::byPosition(lods)); } }//namespacedna