RealtimeStyleTransferRuntime/Source/LyraGame/System/LyraAssetManagerStartupJob.h

48 lines
1.5 KiB
C
Raw Normal View History

2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Engine/StreamableManager.h"
DECLARE_DELEGATE_OneParam(FLyraAssetManagerStartupJobSubstepProgress, float /*NewProgress*/);
/** Handles reporting progress from streamable handles */
struct FLyraAssetManagerStartupJob
{
FLyraAssetManagerStartupJobSubstepProgress SubstepProgressDelegate;
TFunction<void(const FLyraAssetManagerStartupJob&, TSharedPtr<FStreamableHandle>&)> JobFunc;
FString JobName;
float JobWeight;
mutable double LastUpdate = 0;
/** Simple job that is all synchronous */
FLyraAssetManagerStartupJob(const FString& InJobName, const TFunction<void(const FLyraAssetManagerStartupJob&, TSharedPtr<FStreamableHandle>&)>& InJobFunc, float InJobWeight)
: JobFunc(InJobFunc)
, JobName(InJobName)
, JobWeight(InJobWeight)
{}
/** Perform actual loading, will return a handle if it created one */
TSharedPtr<FStreamableHandle> DoJob() const;
void UpdateSubstepProgress(float NewProgress) const
{
SubstepProgressDelegate.ExecuteIfBound(NewProgress);
}
void UpdateSubstepProgressFromStreamable(TSharedRef<FStreamableHandle> StreamableHandle) const
{
if (SubstepProgressDelegate.IsBound())
{
// StreamableHandle::GetProgress traverses() a large graph and is quite expensive
double Now = FPlatformTime::Seconds();
if (LastUpdate - Now > 1.0 / 60)
{
SubstepProgressDelegate.Execute(StreamableHandle->GetProgress());
LastUpdate = Now;
}
}
}
};