Files
FlaxEngine/Source/Engine/Streaming/Handlers/ModelsStreamingHandler.cpp
2021-06-10 16:59:59 +02:00

51 lines
1.4 KiB
C++

// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
#include "ModelsStreamingHandler.h"
#include "Engine/Content/Assets/Model.h"
StreamingQuality ModelsStreamingHandler::CalculateTargetQuality(StreamableResource* resource, DateTime now)
{
ASSERT(resource);
// TODO: calculate a proper quality levels for models based on render time and streaming enable/disable options
return MAX_STREAMING_QUALITY;
}
int32 ModelsStreamingHandler::CalculateResidency(StreamableResource* resource, StreamingQuality quality)
{
ASSERT(resource);
auto& model = *(Model*)resource;
auto lodCount = model.GetLODsCount();
if (quality < ZeroTolerance)
return 0;
int32 lods = Math::CeilToInt(quality * (StreamingQuality)lodCount);
ASSERT(model.IsValidLODIndex(lods - 1));
return lods;
}
int32 ModelsStreamingHandler::CalculateRequestedResidency(StreamableResource* resource, int32 targetResidency)
{
ASSERT(resource);
auto& model = *(Model*)resource;
// Always load only single LOD at once
int32 residency = targetResidency;
int32 currentResidency = model.GetCurrentResidency();
if (currentResidency < targetResidency)
{
// Up
residency = currentResidency + 1;
}
else if (currentResidency > targetResidency)
{
// Down
residency = currentResidency - 1;
}
return residency;
}