UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DynamicMeshBuilder.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 DynamicMeshBuilder.h: Dynamic mesh builder definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "Components.h"
10#include "CoreMinimal.h"
11#include "PackedNormal.h"
12#include "HitProxies.h"
13#include "RenderResource.h"
14#include "RenderUtils.h"
15#include "RenderMath.h"
16
22struct FMeshBatch;
23
26{
30 TangentX(FVector3f(1,0,0)),
31 TangentZ(FVector3f(0,0,1)),
32 Color(FColor(255,255,255))
33 {
34 // basis determinant default to +1.0
35 TangentZ.Vector.W = 127;
36
37 for (int i = 0; i < MAX_STATIC_TEXCOORDS; i++)
38 {
40 }
41 }
42
45 TangentX(FVector3f(1, 0, 0)),
46 TangentZ(FVector3f(0, 0, 1)),
47 Color(InColor)
48 {
49 // basis determinant default to +1.0
50 TangentZ.Vector.W = 127;
51
52 for (int i = 0; i < MAX_STATIC_TEXCOORDS; i++)
53 {
55 }
56 }
57
62 Color(InColor)
63 {
64 // basis determinant default to +1.0
65 TangentZ.Vector.W = 127;
66
67 for (int i = 0; i < MAX_STATIC_TEXCOORDS; i++)
68 {
70 }
71 }
72
75 , TangentX(FVector3f(1, 0, 0))
76 , TangentZ(FVector3f(0, 0, 1))
78 {
79 // TangentZ.w contains the sign of the tangent basis determinant. Assume +1
80 TangentZ.Vector.W = 127;
81
83 TextureCoordinate[1] = FVector2f(LayerTexcoords.X, LayerTexcoords.Y); // Z not currently set, so use Y
84 TextureCoordinate[2] = FVector2f(LayerTexcoords.Y, LayerTexcoords.X); // Z not currently set, so use X
86 };
87
89 {
92 // store determinant of basis in w component of normal vector
94 }
95
97 {
98 return FVector3f(GenerateYAxis(TangentX, TangentZ)); //LWC_TODO: Precision loss
99 };
100
106};
107
115
127
133{
134public:
135 ENGINE_API int32 GetIndexBufferSize(uint32 NumElements) const;
136 ENGINE_API int32 GetVertexBufferSize(uint32 Stride, uint32 NumElements) const;
138
139 ENGINE_API virtual FBufferRHIRef AllocIndexBuffer(FRHICommandListBase& RHICmdList, uint32 NumElements);
140 ENGINE_API virtual void ReleaseIndexBuffer(FBufferRHIRef& IndexBufferRHI);
141 ENGINE_API virtual FBufferRHIRef AllocVertexBuffer(FRHICommandListBase& RHICmdList, uint32 Stride, uint32 NumElements);
142 ENGINE_API virtual void ReleaseVertexBuffer(FBufferRHIRef& VertexBufferRHI);
143
144 UE_DEPRECATED(5.4, "AllocIndexBuffer requires a command list.")
145 ENGINE_API virtual FBufferRHIRef AllocIndexBuffer(uint32 NumElements) final;
146
147 UE_DEPRECATED(5.4, "AllocVertexBuffer requires a command list.")
148 ENGINE_API virtual FBufferRHIRef AllocVertexBuffer(uint32 Stride, uint32 NumElements) final;
149};
150
157{
158public:
159
162
165
168 const FVector3f& InPosition,
170 const FVector3f& InTangentX,
171 const FVector3f& InTangentY,
172 const FVector3f& InTangentZ,
173 const FColor& InColor
174 );
175
178
180 ENGINE_API void AddTriangle(int32 V0,int32 V1,int32 V2);
181
184
187
190
193
195 ENGINE_API void GetMesh(const FMatrix& LocalToWorld, const FMaterialRenderProxy* MaterialRenderProxy, uint8 DepthPriorityGroup, bool bDisableBackfaceCulling, bool bReceivesDecals, int32 ViewIndex, FMeshElementCollector& Collector);
196 ENGINE_API void GetMesh(const FMatrix& LocalToWorld, const FMaterialRenderProxy* MaterialRenderProxy, uint8 DepthPriorityGroup, bool bDisableBackfaceCulling, bool bReceivesDecals, bool bUseSelectionOutline, int32 ViewIndex,
197 FMeshElementCollector& Collector, HHitProxy* HitProxy);
198 ENGINE_API void GetMesh(const FMatrix& LocalToWorld, const FMaterialRenderProxy* MaterialRenderProxy, uint8 DepthPriorityGroup, bool bDisableBackfaceCulling, bool bReceivesDecals, bool bUseSelectionOutline, int32 ViewIndex,
199 FMeshElementCollector& Collector, const FHitProxyId HitProxyId = FHitProxyId());
200 ENGINE_API void GetMesh(const FMatrix& LocalToWorld, const FMaterialRenderProxy* MaterialRenderProxy, uint8 DepthPriorityGroup, const FDynamicMeshBuilderSettings& Settings, FDynamicMeshDrawOffset const * const DrawOffset, int32 ViewIndex,
201 FMeshElementCollector& Collector, const FHitProxyId HitProxyId = FHitProxyId());
202 ENGINE_API void GetMesh(const FMatrix& LocalToWorld, const FMatrix& PrevLocalToWorld, const FMaterialRenderProxy* MaterialRenderProxy, uint8 DepthPriorityGroup, const FDynamicMeshBuilderSettings& Settings,
203 FDynamicMeshDrawOffset const * const DrawOffset, int32 ViewIndex, FMeshElementCollector& Collector, const FHitProxyId HitProxyId = FHitProxyId());
204
205 ENGINE_API void GetMeshElement(const FMatrix& LocalToWorld, const FMaterialRenderProxy* MaterialRenderProxy, uint8 DepthPriorityGroup, bool bDisableBackfaceCulling, bool bReceivesDecals, int32 ViewIndex, FMeshBuilderOneFrameResources& OneFrameResource, FMeshBatch& Mesh);
206 ENGINE_API void GetMeshElement(const FPrimitiveUniformShaderParameters& PrimitiveParams, const FMaterialRenderProxy* MaterialRenderProxy, uint8 DepthPriorityGroup, bool bDisableBackfaceCulling, int32 ViewIndex, FMeshBuilderOneFrameResources& OneFrameResource, FMeshBatch& Mesh);
207
216 ENGINE_API void Draw(FPrimitiveDrawInterface* PDI,const FMatrix& LocalToWorld,const FMaterialRenderProxy* MaterialRenderProxy,uint8 DepthPriorityGroup,bool bDisableBackfaceCulling=false, bool bReceivesDecals=true, const FHitProxyId HitProxyId = FHitProxyId());
217
218private:
219 class FMeshBuilderOneFrameResources* OneFrameResources = nullptr;
222 ERHIFeatureLevel::Type FeatureLevel;
223 FDynamicMeshBufferAllocator* DynamicMeshBufferAllocator;
224};
225
238
250
251#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
252#include "LocalVertexFactory.h"
253#endif
@ MAX_STATIC_TEXCOORDS
Definition Components.h:22
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
UE::Math::TVector2< float > FVector2f
Definition MathFwd.h:74
UE::Math::TVector< float > FVector3f
Definition MathFwd.h:73
EBufferUsageFlags
Definition RHIDefinitions.h:892
int8 GetBasisDeterminantSignByte(const FPackedNormal &XAxis, const FPackedNormal &YAxis, const FPackedNormal &ZAxis)
Definition RenderMath.h:37
FVector GenerateYAxis(const VectorType &XAxis, const VectorType &ZAxis)
Definition RenderMath.h:49
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition DynamicMeshBuilder.h:133
ENGINE_API int32 GetIndexBufferSize(uint32 NumElements) const
Definition DynamicMeshBuilder.cpp:228
virtual ENGINE_API FBufferRHIRef AllocVertexBuffer(FRHICommandListBase &RHICmdList, uint32 Stride, uint32 NumElements)
Definition DynamicMeshBuilder.cpp:265
virtual ENGINE_API ~FDynamicMeshBufferAllocator()
Definition DynamicMeshBuilder.cpp:224
virtual ENGINE_API void ReleaseIndexBuffer(FBufferRHIRef &IndexBufferRHI)
Definition DynamicMeshBuilder.cpp:255
ENGINE_API int32 GetVertexBufferSize(uint32 Stride, uint32 NumElements) const
Definition DynamicMeshBuilder.cpp:233
virtual ENGINE_API FBufferRHIRef AllocIndexBuffer(FRHICommandListBase &RHICmdList, uint32 NumElements)
Definition DynamicMeshBuilder.cpp:243
virtual ENGINE_API void ReleaseVertexBuffer(FBufferRHIRef &VertexBufferRHI)
Definition DynamicMeshBuilder.cpp:277
Definition DynamicMeshBuilder.h:157
ENGINE_API void GetMeshElement(const FMatrix &LocalToWorld, const FMaterialRenderProxy *MaterialRenderProxy, uint8 DepthPriorityGroup, bool bDisableBackfaceCulling, bool bReceivesDecals, int32 ViewIndex, FMeshBuilderOneFrameResources &OneFrameResource, FMeshBatch &Mesh)
Definition DynamicMeshBuilder.cpp:936
ENGINE_API ~FDynamicMeshBuilder()
Definition DynamicMeshBuilder.cpp:697
ENGINE_API void GetMesh(const FMatrix &LocalToWorld, const FMaterialRenderProxy *MaterialRenderProxy, uint8 DepthPriorityGroup, bool bDisableBackfaceCulling, bool bReceivesDecals, int32 ViewIndex, FMeshElementCollector &Collector)
Definition DynamicMeshBuilder.cpp:811
ENGINE_API void ReserveVertices(int32 InNumVertices)
Definition DynamicMeshBuilder.cpp:770
ENGINE_API int32 AddVertex(const FVector3f &InPosition, const FVector2f &InTextureCoordinate, const FVector3f &InTangentX, const FVector3f &InTangentY, const FVector3f &InTangentZ, const FColor &InColor)
Definition DynamicMeshBuilder.cpp:706
ENGINE_API void Draw(FPrimitiveDrawInterface *PDI, const FMatrix &LocalToWorld, const FMaterialRenderProxy *MaterialRenderProxy, uint8 DepthPriorityGroup, bool bDisableBackfaceCulling=false, bool bReceivesDecals=true, const FHitProxyId HitProxyId=FHitProxyId())
Definition DynamicMeshBuilder.cpp:1012
ENGINE_API void ReserveTriangles(int32 InNumTriangles)
Definition DynamicMeshBuilder.cpp:776
ENGINE_API int32 AddVertices(const TArray< FDynamicMeshVertex > &InVertices)
Definition DynamicMeshBuilder.cpp:745
ENGINE_API void AddTriangle(int32 V0, int32 V1, int32 V2)
Definition DynamicMeshBuilder.cpp:737
ENGINE_API void AddTriangles(const TArray< uint32 > &InIndices)
Definition DynamicMeshBuilder.cpp:753
Definition DynamicMeshBuilder.h:240
TArray< uint16 > Indices
Definition DynamicMeshBuilder.h:245
virtual ENGINE_API ~FDynamicMeshIndexBuffer16()
ENGINE_API FDynamicMeshIndexBuffer16()
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList) override
Definition DynamicMeshBuilder.cpp:218
EBufferUsageFlags UsageFlags
Definition DynamicMeshBuilder.h:246
Definition DynamicMeshBuilder.h:228
ENGINE_API FDynamicMeshIndexBuffer32()
TArray< uint32 > Indices
Definition DynamicMeshBuilder.h:233
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList) override
Definition DynamicMeshBuilder.cpp:210
virtual ENGINE_API ~FDynamicMeshIndexBuffer32()
EBufferUsageFlags UsageFlags
Definition DynamicMeshBuilder.h:234
Definition HitProxies.h:86
Definition RenderResource.h:509
Definition MaterialRenderProxy.h:102
Definition MeshBuilderOneFrameResources.h:8
Definition MeshElementCollector.h:26
Definition DynamicMeshBuilder.cpp:338
Definition DynamicMeshBuilder.cpp:395
Definition PrimitiveDrawInterface.h:19
Definition RHICommandList.h:455
Definition HitProxies.h:135
Definition Array.h:670
Type
Definition RHIFeatureLevel.h:20
Definition Color.h:486
Definition DynamicMeshBuilder.h:117
bool bCanApplyViewModeOverrides
Definition DynamicMeshBuilder.h:123
bool bReceivesDecals
Definition DynamicMeshBuilder.h:121
bool bUseWireframeSelectionColoring
Definition DynamicMeshBuilder.h:124
bool bUseSelectionOutline
Definition DynamicMeshBuilder.h:122
bool bDisableBackfaceCulling
Definition DynamicMeshBuilder.h:119
bool bIsFirstPerson
Definition DynamicMeshBuilder.h:125
bool bWireframe
Definition DynamicMeshBuilder.h:120
bool CastShadow
Definition DynamicMeshBuilder.h:118
Definition DynamicMeshBuilder.h:109
uint32 NumPrimitives
Definition DynamicMeshBuilder.h:113
uint32 MaxVertexIndex
Definition DynamicMeshBuilder.h:112
uint32 MinVertexIndex
Definition DynamicMeshBuilder.h:111
uint32 FirstIndex
Definition DynamicMeshBuilder.h:110
Definition DynamicMeshBuilder.h:26
FDynamicMeshVertex(const FVector3f &InPosition, const FVector3f &InTangentX, const FVector3f &InTangentZ, const FVector2f &InTexCoord, const FColor &InColor)
Definition DynamicMeshBuilder.h:58
FPackedNormal TangentZ
Definition DynamicMeshBuilder.h:104
FPackedNormal TangentX
Definition DynamicMeshBuilder.h:103
FDynamicMeshVertex(const FVector3f &InPosition)
Definition DynamicMeshBuilder.h:28
FVector2f TextureCoordinate[MAX_STATIC_TEXCOORDS]
Definition DynamicMeshBuilder.h:102
FColor Color
Definition DynamicMeshBuilder.h:105
FVector3f GetTangentY() const
Definition DynamicMeshBuilder.h:96
FDynamicMeshVertex()
Definition DynamicMeshBuilder.h:27
FDynamicMeshVertex(const FVector3f &InPosition, const FVector3f &LayerTexcoords, const FVector2f &WeightmapTexcoords)
Definition DynamicMeshBuilder.h:73
FVector3f Position
Definition DynamicMeshBuilder.h:101
void SetTangents(const FVector3f &InTangentX, const FVector3f &InTangentY, const FVector3f &InTangentZ)
Definition DynamicMeshBuilder.h:88
FDynamicMeshVertex(const FVector3f &InPosition, const FVector2f &InTexCoord, const FColor &InColor)
Definition DynamicMeshBuilder.h:43
Definition MeshBatch.h:371
Definition PackedNormal.h:13
union FPackedNormal::@1687 Vector
int8 W
Definition PackedNormal.h:18
static CORE_API const TVector2< float > ZeroVector
Definition Vector2D.h:63