UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SkeletalMeshVertexBuffer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "PackedNormal.h"
7#include "Components.h"
10#include "RenderMath.h"
11
12struct FSoftSkinVertex;
13
19{
20 // Tangent, U-direction
22 // Normal
24
25 inline FVector3f GetTangentY() const
26 {
28 }
29
31 void Serialize(FArchive& Ar);
32};
33
38template<uint32 InNumTexCoords>
40{
43
48
57 {
58 V.Serialize(Ar);
59 Ar << V.Position;
60
61 for (uint32 UVIndex = 0; UVIndex < NumTexCoords; UVIndex++)
62 {
63 Ar << V.UVs[UVIndex];
64 }
65 return Ar;
66 }
67};
68
73template<uint32 InNumTexCoords>
75{
78
83
92 {
93 V.Serialize(Ar);
94 Ar << V.Position;
95
96 for (uint32 UVIndex = 0; UVIndex < NumTexCoords; UVIndex++)
97 {
98 Ar << V.UVs[UVIndex];
99 }
100 return Ar;
101 }
102};
103
106{
107public:
108
111
116 virtual void ResizeBuffer(uint32 NumVertices) = 0;
117
119 virtual uint32 GetStride() const = 0;
120
122 virtual uint8* GetDataPointer() = 0;
123
125 virtual uint32 GetNumVertices() = 0;
126
129
131 virtual void Serialize(FArchive& Ar) = 0;
132};
133
134
136template<typename VertexDataType>
139 public TResourceArray<VertexDataType, VERTEXBUFFER_ALIGNMENT>
140{
141public:
143
152
158 virtual void ResizeBuffer(uint32 NumVertices)
159 {
160 if ((uint32)ArrayType::Num() < NumVertices)
161 {
162 // Enlarge the array.
163 ArrayType::Reserve(NumVertices);
165 }
166 else if ((uint32)ArrayType::Num() > NumVertices)
167 {
168 // Shrink the array.
169 ArrayType::RemoveAt(NumVertices, ArrayType::Num() - NumVertices);
170 }
171 }
175 virtual uint32 GetStride() const
176 {
177 return sizeof(VertexDataType);
178 }
183 {
184 return (uint8*)&(*this)[0];
185 }
190 {
191 return ArrayType::Num();
192 }
197 {
198 return this;
199 }
206 virtual void Serialize(FArchive& Ar)
207 {
209 }
219};
220
221
226{
227public:
229
236
237protected:
238 // guaranteed only to be valid if the vertex buffer is valid
240
241private:
243 bool bUseFullPrecisionUVs = false;
245 bool bNeedsCPUAccess = false;
247 FSkeletalMeshVertexDataInterface* VertexData = nullptr;
249 uint8* Data = nullptr;
251 uint32 Stride = 0;
253 uint32 NumVertices = 0;
255 uint32 NumTexCoords = 0;
256
260 void AllocateData();
261
262 void CleanUp();
263};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ VERTEXBUFFER_ALIGNMENT
Definition DynamicRHIResourceArray.h:16
UE::Math::TVector< float > FVector3f
Definition MathFwd.h:73
FVector GenerateYAxis(const VectorType &XAxis, const VectorType &ZAxis)
Definition RenderMath.h:49
EStaticMeshVertexUVType
Definition StaticMeshVertexBuffer.h:96
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 SkeletalMeshVertexBuffer.h:226
FShaderResourceViewRHIRef SRVValue
Definition SkeletalMeshVertexBuffer.h:239
~FDummySkeletalMeshVertexBuffer()
Definition SkeletalMeshVertexBuffer.cpp:14
friend FArchive & operator<<(FArchive &Ar, FDummySkeletalMeshVertexBuffer &VertexBuffer)
Definition SkeletalMeshVertexBuffer.cpp:34
Definition ResourceArray.h:77
Definition SkeletalMeshVertexBuffer.h:106
virtual ~FSkeletalMeshVertexDataInterface()
Definition SkeletalMeshVertexBuffer.h:110
virtual uint32 GetStride() const =0
virtual uint32 GetNumVertices()=0
virtual FResourceArrayInterface * GetResourceArray()=0
virtual void Serialize(FArchive &Ar)=0
virtual uint8 * GetDataPointer()=0
virtual void ResizeBuffer(uint32 NumVertices)=0
Definition ContainerAllocationPolicies.h:447
Definition Array.h:670
UE_FORCEINLINE_HINT SizeType AddUninitialized()
Definition Array.h:1664
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void RemoveAt(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2083
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition DynamicRHIResourceArray.h:31
void BulkSerialize(FArchive &Ar, bool bForcePerElementSerialization=false)
Definition DynamicRHIResourceArray.h:129
TResourceArray & operator=(TResourceArray &&)=default
Definition SkeletalMeshVertexBuffer.h:140
TSkeletalMeshVertexData< VertexDataType > & operator=(const TArray< VertexDataType > &Other)
Definition SkeletalMeshVertexBuffer.h:214
virtual void Serialize(FArchive &Ar)
Definition SkeletalMeshVertexBuffer.h:206
TResourceArray< VertexDataType, VERTEXBUFFER_ALIGNMENT > ArrayType
Definition SkeletalMeshVertexBuffer.h:142
virtual uint32 GetNumVertices()
Definition SkeletalMeshVertexBuffer.h:189
virtual uint32 GetStride() const
Definition SkeletalMeshVertexBuffer.h:175
TSkeletalMeshVertexData(bool InNeedsCPUAccess=false)
Definition SkeletalMeshVertexBuffer.h:148
virtual uint8 * GetDataPointer()
Definition SkeletalMeshVertexBuffer.h:182
virtual void ResizeBuffer(uint32 NumVertices)
Definition SkeletalMeshVertexBuffer.h:158
virtual FResourceArrayInterface * GetResourceArray()
Definition SkeletalMeshVertexBuffer.h:196
Definition PackedNormal.h:13
Definition SkeletalMeshTypes.h:57
Definition Vector2DHalf.h:14
Definition SkeletalMeshVertexBuffer.h:19
FVector3f GetTangentY() const
Definition SkeletalMeshVertexBuffer.h:25
FPackedNormal TangentX
Definition SkeletalMeshVertexBuffer.h:21
void Serialize(FArchive &Ar)
Definition SkeletalMesh.cpp:154
FPackedNormal TangentZ
Definition SkeletalMeshVertexBuffer.h:23
Definition SkeletalMeshVertexBuffer.h:40
FVector2DHalf UVs[NumTexCoords]
Definition SkeletalMeshVertexBuffer.h:47
static constexpr EStaticMeshVertexUVType StaticMeshVertexUVType
Definition SkeletalMeshVertexBuffer.h:42
friend FArchive & operator<<(FArchive &Ar, TGPUSkinVertexFloat16Uvs &V)
Definition SkeletalMeshVertexBuffer.h:56
static constexpr uint32 NumTexCoords
Definition SkeletalMeshVertexBuffer.h:41
FVector3f Position
Definition SkeletalMeshVertexBuffer.h:45
Definition SkeletalMeshVertexBuffer.h:75
FVector2f UVs[NumTexCoords]
Definition SkeletalMeshVertexBuffer.h:82
static constexpr uint32 NumTexCoords
Definition SkeletalMeshVertexBuffer.h:76
static constexpr EStaticMeshVertexUVType StaticMeshVertexUVType
Definition SkeletalMeshVertexBuffer.h:77
FVector3f Position
Definition SkeletalMeshVertexBuffer.h:80
friend FArchive & operator<<(FArchive &Ar, TGPUSkinVertexFloat32Uvs &V)
Definition SkeletalMeshVertexBuffer.h:91