UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PositionVertexBuffer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Math/Vector.h"
6#include "RenderResource.h"
7#include "RHIFwd.h"
8
12
15{
17
19 {
20 Ar << V.Position;
21 return Ar;
22 }
23};
24
27{
28public:
29
32
35
37 ENGINE_API void CleanUp();
38
39 void ENGINE_API Init(uint32 NumVertices, bool bInNeedsCPUAccess = true);
40
47
53
55
64
72
74
76
77 void ClearMetaData();
78
83
84 // Vertex data accessors.
85 inline FVector3f& VertexPosition(uint32 VertexIndex)
86 {
87 checkSlow(VertexIndex < GetNumVertices());
88 return ((FPositionVertex*)(Data + VertexIndex * Stride))->Position;
89 }
90 inline const FVector3f& VertexPosition(uint32 VertexIndex) const
91 {
92 checkSlow(VertexIndex < GetNumVertices());
93 return ((FPositionVertex*)(Data + VertexIndex * Stride))->Position;
94 }
95 // Other accessors.
96 inline uint32 GetStride() const
97 {
98 return Stride;
99 }
100 inline uint32 GetNumVertices() const
101 {
102 return NumVertices;
103 }
104 ENGINE_API bool GetAllowCPUAccess() const;
105
106 inline SIZE_T GetAllocatedSize() const { return (Data != nullptr) ? Stride * NumVertices : 0; }
107
110
114
115 // FRenderResource interface.
116 ENGINE_API virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
117 ENGINE_API virtual void ReleaseRHI() override;
118 virtual FString GetFriendlyName() const override { return TEXT("PositionOnly Static-mesh vertices"); }
119
120 ENGINE_API void BindPositionVertexBuffer(const class FVertexFactory* VertexFactory, struct FStaticMeshDataType& Data) const;
121
122 void* GetVertexData() { return Data; }
123 const void* GetVertexData() const { return Data; }
124
125 FRHIShaderResourceView* GetSRV() const { return PositionComponentSRV; }
126
127private:
128
129 FShaderResourceViewRHIRef PositionComponentSRV;
130
132 FPositionVertexData* VertexData;
133
135 uint8* Data;
136
138 uint32 Stride;
139
141 uint32 NumVertices;
142
143 bool bNeedsCPUAccess = true;
144
146 void AllocateData(bool bInNeedsCPUAccess = true);
147};
148
149
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
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 PositionVertexBuffer.h:27
ENGINE_API bool AppendVertices(const FStaticMeshBuildVertex *Vertices, const uint32 NumVerticesToAppend)
Definition PositionVertexBuffer.cpp:116
void InitRHIForStreaming(FRHIBuffer *IntermediateBuffer, FRHIResourceReplaceBatcher &Batcher)
Definition PositionVertexBuffer.cpp:219
uint32 GetStride() const
Definition PositionVertexBuffer.h:96
ENGINE_API FPositionVertexBuffer()
Definition PositionVertexBuffer.cpp:28
void * GetVertexData()
Definition PositionVertexBuffer.h:122
FVector3f & VertexPosition(uint32 VertexIndex)
Definition PositionVertexBuffer.h:85
const FVector3f & VertexPosition(uint32 VertexIndex) const
Definition PositionVertexBuffer.h:90
void SerializeMetaData(FArchive &Ar)
Definition PositionVertexBuffer.cpp:184
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList) override
Definition PositionVertexBuffer.cpp:234
uint32 GetNumVertices() const
Definition PositionVertexBuffer.h:100
SIZE_T GetAllocatedSize() const
Definition PositionVertexBuffer.h:106
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition PositionVertexBuffer.cpp:228
ENGINE_API void SetMetaData(uint32 InStride, uint32 InNumVertices)
Definition PositionVertexBuffer.cpp:189
virtual FString GetFriendlyName() const override
Definition PositionVertexBuffer.h:118
ENGINE_API bool GetAllowCPUAccess() const
Definition PositionVertexBuffer.cpp:200
ENGINE_API void operator=(const FPositionVertexBuffer &Other)
Definition PositionVertexBuffer.cpp:208
ENGINE_API void BindPositionVertexBuffer(const class FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data) const
Definition PositionVertexBuffer.cpp:267
const void * GetVertexData() const
Definition PositionVertexBuffer.h:123
FRHIShaderResourceView * GetSRV() const
Definition PositionVertexBuffer.h:125
virtual ENGINE_API void ReleaseRHI() override
Definition PositionVertexBuffer.cpp:251
ENGINE_API void CleanUp()
Definition PositionVertexBuffer.cpp:41
FBufferRHIRef CreateRHIBuffer(FRHICommandListBase &RHICmdList)
Definition PositionVertexBuffer.cpp:214
ENGINE_API ~FPositionVertexBuffer()
Definition PositionVertexBuffer.cpp:35
void ClearMetaData()
Definition PositionVertexBuffer.cpp:195
Definition PositionVertexBuffer.cpp:19
Definition RHIResources.h:1581
Definition RHICommandList.h:455
Definition RHIResourceReplace.h:55
Definition RHIResources.h:3304
Definition RenderResource.h:474
Definition VertexFactory.h:661
Definition Array.h:670
Definition Components.h:72
Definition PositionVertexBuffer.h:15
FVector3f Position
Definition PositionVertexBuffer.h:16
friend FArchive & operator<<(FArchive &Ar, FPositionVertex &V)
Definition PositionVertexBuffer.h:18
Definition Components.h:26
Definition Components.h:38