// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "UObject/StrongObjectPtr.h" #include "Materials/MaterialInterface.h" class FMaterialShaderMap; class UMaterialInterface; namespace UE::Cook { class FODSCClientData { public: void OnClientConnected(const void* ConnectionPtr); void OnClientDisconnected(const void* ConnectionPtr); void KeepClientPersistentData(const void* ConnectionPtr, const TArray>& LoadedMaterialsToRecompile); void FlushClientPersistentData(const void* ConnectionPtr); static UMaterialInterface* FindMaterial(const FString& MaterialKey); private: friend class FODSCClientDataAccess; static UMaterialInterface* TryFindWorldPartitionMaterial(const FSoftObjectPath& MaterialSoftPath, const FSoftObjectPath& ActorSoftPath); static void ScanWorldPartitionAssets(const FString& AssetPath); static void SetupClassExclusionList(); static void CleanupWorldPartitionAssets(); struct FWorldPartitionAssets { FString PackageName; TObjectPtr PackagePtr; }; static TMap WorldPartitionAssets; static TSet ScannedWorldPartitionPaths; static TSet ExcludedPackageNames; struct FODSCClientPersistentData { typedef TMap, int32> Value; Value MaterialShaderMapsKeptAlive; }; static void PurgeMaterialShaderMaps(int32 Lifetime, int32 NumMapsToDelete, FODSCClientPersistentData::Value& MaterialShaderMapsKeptAlive); FODSCClientPersistentData ODSCClientPersistentData; FCriticalSection ODSCClientPersistentDataLock; }; }