// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MuR/Ptr.h" #include "MuR/Model.h" #include "MuR/Parameters.h" #include "Engine/SkeletalMesh.h" #include "CoreMinimal.h" #include "MuCO/CustomizableObjectPrivate.h" #include "MuR/ResourceID.h" #include "CustomizableObjectSkeletalMesh.generated.h" #define UE_API CUSTOMIZABLEOBJECT_API class UCustomizableObjectInstance; class UCustomizableObject; class UCustomizableInstancePrivate; class FUpdateContextPrivate; class FCustomizableObjectMeshStreamIn; struct FModelStreamableBulkData; class FUnrealMutableResourceProvider; /** * CustomizableObjectSkeletalMesh is a class inheriting from USkeletalMesh with the sole purpose of allowing skeletal meshes generated by Mutable * to stream-in Mesh LODs. */ UCLASS(MinimalAPI) class UCustomizableObjectSkeletalMesh : public USkeletalMesh { GENERATED_BODY() friend FCustomizableObjectMeshStreamIn; friend UCustomizableInstancePrivate; friend FMeshCache; UE_API void InitMutableStreamingData(const TSharedRef& InOperationData, const FName& ComponentName, const int32 FirstLOD, const int32 LODCount); //~ Begin UStreamableRenderAsset Interface. UE_API virtual bool StreamIn(int32 NewMipCount, bool bHighPrio) override; //~ End UStreamableRenderAsset Interface. FString CustomizableObjectPathName; TSharedPtr ModelStreamableBulkData; TSharedPtr Model; TSharedPtr MeshIdRegistry; TSharedPtr ImageIdRegistry; TSharedPtr MaterialIdRegistry; TSharedPtr ExternalResourceProvider; /** Instance parameters at the time of creation. */ TSharedPtr Parameters; int32 State = -1; /** Mesh IDs per LOD */ TArray MeshIDs; TArray> SurfaceIDs; TArray> SkinWeightProfileIDs; FMeshCache::FId MeshCacheId; }; #undef UE_API