// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Rendering/NaniteResources.h" #include "NaniteEncodeShared.h" namespace Nanite { struct FResources; class FClusterFixup; class FHierarchyFixup; struct FPage; class FClusterDAG; struct FClusterGroupPart; struct FPackedCluster; struct FPartFixup { uint32 PageIndex = MAX_uint32; uint32 StartClusterIndex = MAX_uint32; uint32 LeafCounter = 0u; // 0 means part has no leaf clusters TArray HierarchyLocations; // Assembly parts can be referenced from many hierarchy nodes // Builder only uint32 GroupIndex = MAX_uint32; }; struct FParentFixup { uint32 PageIndex = MAX_uint32; uint32 PartFixupPageIndex = MAX_uint32; uint32 PartFixupIndex = MAX_uint32; TArray ClusterIndices; // Clusters to change leaf status of }; // Group fixups are always stored in the LAST page. struct FGroupFixup { FPageRangeKey PageDependencyRangeKey; uint32 Flags = 0; uint32 FirstPartFixup = MAX_uint32; uint32 NumPartFixups = MAX_uint32; TArray ParentFixups; // Builder only uint32 GroupIndex = MAX_uint32; }; struct FPageFixups { TArray GroupFixups; TArray PartFixups; TArray ReconsiderPages; }; void CalculatePageDependenciesAndFixups( FResources& Resources, TArray& PageFixups, const TArray& Pages, const FClusterDAG& ClusterDAG, const TArray& Parts); void PerformPageInternalFixup( const FResources& Resources, const TArray& Pages, const FClusterDAG& ClusterDAG, const TArray& Parts, uint32 PageIndex, TArray& PackedClusters); void BuildFixupChunkData(TArray& OutData, const FPageFixups& PageFixups, uint32 NumClusters); }