// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Hash/CityHash.h" #include "NaniteEncodeShared.h" namespace Nanite { // Wasteful to store size for every vert but easier this way. struct FVariableVertex { const float* Data; uint32 SizeInBytes; bool operator==( FVariableVertex Other ) const { return 0 == FMemory::Memcmp( Data, Other.Data, SizeInBytes ); } }; FORCEINLINE uint32 GetTypeHash( FVariableVertex Vert ) { return CityHash32( (const char*)Vert.Data, Vert.SizeInBytes ); } struct FVertexMapEntry { uint32 LocalClusterIndex; uint32 VertexIndex; }; void CalculateEncodingInfos( TArray& EncodingInfos, const TArray& Clusters, int32 NormalPrecision, int32 TangentPrecision, int32 BoneWeightPrecision ); void EncodeGeometryData( const uint32 LocalClusterIndex, const FCluster& Cluster, const FEncodingInfo& EncodingInfo, const TArrayView PageDependencies, const TArray>& PageVertexMaps, TMap& UniqueVertices, uint32& NumCodedVertices, FPageStreams& Streams); TArray> BuildVertexMaps( const TArray& Pages, const TArray& Clusters, const TArray& Parts); }