// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. #pragma once #include "Config.h" #include "Engine/Core/Types/DateTime.h" class StreamingGroup; /// /// Base interface for all streamable resource handlers /// class FLAXENGINE_API IStreamingHandler { public: virtual ~IStreamingHandler() = default; public: /// /// Calculates target quality level for the given resource. /// /// The resource. /// The current time. /// Target Quality virtual StreamingQuality CalculateTargetQuality(StreamableResource* resource, DateTime now) = 0; /// /// Calculates the residency level for a given resource and quality level. /// /// The resource. /// The quality level. /// Residency level virtual int32 CalculateResidency(StreamableResource* resource, StreamingQuality quality) = 0; /// /// Calculates the residency level to stream for a given resource and target residency. /// /// The resource. /// The target residency level. /// Residency level to stream virtual int32 CalculateRequestedResidency(StreamableResource* resource, int32 targetResidency) = 0; /// /// Determines if the specified resource requires the streaming. /// /// The resource. /// The current residency level. /// The target residency level. /// True if perform resource streaming, otherwise false. virtual bool RequiresStreaming(StreamableResource* resource, int32 currentResidency, int32 targetResidency) { return currentResidency != targetResidency; } };