Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

58 lines
1.3 KiB
C++

// 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<FEncodingInfo>& EncodingInfos,
const TArray<FCluster>& Clusters,
int32 NormalPrecision,
int32 TangentPrecision,
int32 BoneWeightPrecision
);
void EncodeGeometryData(
const uint32 LocalClusterIndex,
const FCluster& Cluster,
const FEncodingInfo& EncodingInfo,
const TArrayView<uint16> PageDependencies,
const TArray<TMap<FVariableVertex, FVertexMapEntry>>& PageVertexMaps,
TMap<FVariableVertex, uint32>& UniqueVertices, uint32& NumCodedVertices,
FPageStreams& Streams);
TArray<TMap<FVariableVertex, FVertexMapEntry>> BuildVertexMaps(
const TArray<FPage>& Pages,
const TArray<FCluster>& Clusters,
const TArray<FClusterGroupPart>& Parts);
}