UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SkeletalMeshDuplicatedVerticesBuffer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "RenderResource.h"
8
10{
13
22 {
23 Ar << V.Length
24 << V.Index;
25 return Ar;
26 }
27};
28template<> struct TCanBulkSerialize<FIndexLengthPair> { enum { Value = true }; };
29
31{
32public:
35
38
40
42#if WITH_EDITOR
43 // Keep CPU copy in editor for geometry operations
44 : DupVertData(true), DupVertIndexData(true)
45#else
46 : DupVertData(false), DupVertIndexData(false)
47#endif
48 , bHasOverlappingVertices(false) {}
49
52
53 void Init(const int32 NumVertices, const TMap<int32, TArray<int32>>& OverlappingVertices)
54 {
55 int32 NumDups = 0;
56 for (auto Iter = OverlappingVertices.CreateConstIterator(); Iter; ++Iter)
57 {
58 const TArray<int32>& Array = Iter.Value();
59 NumDups += Array.Num();
60 }
61
63 DupVertIndexData.ResizeBuffer(NumVertices ? NumVertices : 1);
64
67 check(VertStride == sizeof(uint32));
68
70 uint32 IndexStride = DupVertIndexData.GetStride();
71 check(IndexStride == sizeof(FIndexLengthPair));
72
73 if (NumDups)
74 {
75 int32 SubIndex = 0;
76 for (int32 Index = 0; Index < NumVertices; ++Index)
77 {
79 FIndexLengthPair NewEntry;
80 NewEntry.Length = (Array) ? Array->Num() : 0;
81 NewEntry.Index = SubIndex;
82 *((FIndexLengthPair*)(IndexData + Index * IndexStride)) = NewEntry;
83 if (Array)
84 {
85 for (const int32 OverlappingVert : *Array)
86 {
88 SubIndex++;
89 }
90 }
91 }
94 }
95 else
96 {
97 FMemory::Memzero(IndexData, NumVertices * sizeof(FIndexLengthPair));
99 }
100 }
101
107
108 virtual void InitRHI(FRHICommandListBase& RHICmdList) override
109 {
110 const static FLazyName DuplicatedVerticesBuffeName(TEXT("FDuplicatedVerticesBuffer"));
111 {
113 check(ResourceArray->GetResourceDataSize() > 0);
114
115 const FRHIBufferCreateDesc Desc =
116 FRHIBufferCreateDesc::CreateVertex(TEXT("DuplicatedVerticesIndexBuffer"), ResourceArray->GetResourceDataSize())
122
129 }
130
131 {
133 check(ResourceArray->GetResourceDataSize() > 0);
134
135 const FRHIBufferCreateDesc Desc =
136 FRHIBufferCreateDesc::CreateVertex(TEXT("LengthAndIndexDuplicatedVerticesIndexBuffer"), ResourceArray->GetResourceDataSize())
142
149 }
150 }
151
152 // FRenderResource interface.
158 virtual FString GetFriendlyName() const override { return TEXT("FDuplicatedVerticesBuffer"); }
159
161 {
162 Ar << Data.DupVertData;
163 Ar << Data.DupVertIndexData;
164
165 return Ar;
166 }
167};
#define check(expr)
Definition AssertionMacros.h:314
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ PF_R32_UINT
Definition PixelFormat.h:45
#define BUF_ShaderResource
Definition RHIDefinitions.h:988
#define BUF_Static
Definition RHIDefinitions.h:980
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition SkeletalMeshDuplicatedVerticesBuffer.h:31
FVertexBufferAndSRV DuplicatedVerticesIndexBuffer
Definition SkeletalMeshDuplicatedVerticesBuffer.h:33
friend FArchive & operator<<(FArchive &Ar, FDuplicatedVerticesBuffer &Data)
Definition SkeletalMeshDuplicatedVerticesBuffer.h:160
virtual void InitRHI(FRHICommandListBase &RHICmdList) override
Definition SkeletalMeshDuplicatedVerticesBuffer.h:108
void ReleaseCPUResources()
Definition SkeletalMeshDuplicatedVerticesBuffer.h:102
virtual ~FDuplicatedVerticesBuffer()
Definition SkeletalMeshDuplicatedVerticesBuffer.h:51
bool bHasOverlappingVertices
Definition SkeletalMeshDuplicatedVerticesBuffer.h:39
virtual FString GetFriendlyName() const override
Definition SkeletalMeshDuplicatedVerticesBuffer.h:158
FDuplicatedVerticesBuffer()
Definition SkeletalMeshDuplicatedVerticesBuffer.h:41
TSkeletalMeshVertexData< FIndexLengthPair > DupVertIndexData
Definition SkeletalMeshDuplicatedVerticesBuffer.h:37
FVertexBufferAndSRV LengthAndIndexDuplicatedVerticesIndexBuffer
Definition SkeletalMeshDuplicatedVerticesBuffer.h:34
TSkeletalMeshVertexData< uint32 > DupVertData
Definition SkeletalMeshDuplicatedVerticesBuffer.h:36
virtual void ReleaseRHI() override
Definition SkeletalMeshDuplicatedVerticesBuffer.h:153
void Init(const int32 NumVertices, const TMap< int32, TArray< int32 > > &OverlappingVertices)
Definition SkeletalMeshDuplicatedVerticesBuffer.h:53
Definition NameTypes.h:1680
Definition RHICommandList.h:455
FBufferRHIRef CreateBuffer(const FRHIBufferCreateDesc &CreateDesc)
Definition RHICommandList.h:800
FShaderResourceViewRHIRef CreateShaderResourceView(FRHIBuffer *Buffer, FRHIViewDesc::FBufferSRV::FInitializer const &ViewDesc)
Definition RHICommandList.h:975
Definition RenderResource.h:37
FName GetOwnerName() const
Definition RenderResource.h:127
Definition ResourceArray.h:77
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT bool Find(const ElementType &Item, SizeType &Index) const
Definition Array.h:1302
Definition UnrealString.h.inl:34
virtual void Discard() override
Definition DynamicRHIResourceArray.h:82
Definition SkeletalMeshVertexBuffer.h:140
virtual uint32 GetStride() const
Definition SkeletalMeshVertexBuffer.h:175
virtual uint8 * GetDataPointer()
Definition SkeletalMeshVertexBuffer.h:182
virtual void ResizeBuffer(uint32 NumVertices)
Definition SkeletalMeshVertexBuffer.h:158
virtual FResourceArrayInterface * GetResourceArray()
Definition SkeletalMeshVertexBuffer.h:196
U16 Index
Definition radfft.cpp:71
Definition SkeletalMeshDuplicatedVerticesBuffer.h:10
uint32 Length
Definition SkeletalMeshDuplicatedVerticesBuffer.h:11
friend FArchive & operator<<(FArchive &Ar, FIndexLengthPair &V)
Definition SkeletalMeshDuplicatedVerticesBuffer.h:21
uint32 Index
Definition SkeletalMeshDuplicatedVerticesBuffer.h:12
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition RHIResources.h:1417
FRHIBufferCreateDesc & SetInitActionResourceArray(FResourceArrayUploadInterface *InInitialData)
Definition RHIResources.h:1546
static FRHIBufferCreateDesc CreateVertex(const TCHAR *InDebugName)
Definition RHIResources.h:1438
FRHIBufferCreateDesc & SetOwnerName(FName InOwnerName)
Definition RHIResources.h:1532
FRHIBufferCreateDesc & DetermineInitialState()
Definition RHIResources.h:1529
FRHIBufferCreateDesc & AddUsage(EBufferUsageFlags InUsage)
Definition RHIResources.h:1524
FRHIBufferCreateDesc & SetClassName(FName InClassName)
Definition RHIResources.h:1531
FInitializer & SetType(EBufferType Type)
Definition RHIResources.h:2824
FInitializer & SetFormat(EPixelFormat InFormat)
Definition RHIResources.h:2848
static FBufferSRV::FInitializer CreateBufferSRV()
Definition RHIResources.h:3124
Definition GPUSkinVertexFactory.h:59
FShaderResourceViewRHIRef VertexBufferSRV
Definition GPUSkinVertexFactory.h:83
void SafeRelease()
Definition GPUSkinVertexFactory.h:75
FBufferRHIRef VertexBufferRHI
Definition GPUSkinVertexFactory.h:82
Definition Array.h:45
@ Value
Definition Array.h:46