// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. #pragma once #include "Engine/Core/Types/BaseTypes.h" class StreamingGroup; class StreamableResource; /// /// Base interface for all streamable resource handlers that implement resource streaming policy. /// class FLAXENGINE_API IStreamingHandler { public: virtual ~IStreamingHandler() = default; public: /// /// Calculates target quality level (0-1) for the given resource. /// /// The resource. /// The current time and date. /// The current platform time (seconds). /// Target quality (0-1). virtual float CalculateTargetQuality(StreamableResource* resource, DateTime now, double currentTime) = 0; /// /// Calculates the residency level for a given resource and quality level. /// /// The resource. /// The quality level (0-1). /// Residency level virtual int32 CalculateResidency(StreamableResource* resource, float 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; } };