UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BaseDynamicMeshSceneProxy.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"
11#include "RayTracingGeometry.h"
12#include "Templates/PimplPtr.h"
13#include "Util/ProgressCancel.h"
14#include "DistanceFieldAtlas.h"
15
17
24
29
30
31
32
39{
42public:
44
50
51
52protected:
53 // Set of currently-allocated RenderBuffers. We own these pointers and must clean them up.
54 // Must guard access with AllocatedSetsLock!!
56
57 // use to control access to AllocatedBufferSets
59
60 // control whether the mesh is rendered two-sided
61 bool bTwoSided = false;
62
63 // control raytracing support
64 bool bEnableRaytracing = false;
65
66 // Allow view-mode overrides.
68
69 // whether to try to use the static draw instead of dynamic draw path; note we may still use the dynamic path if collision or vertex color rendering is enabled
71
72public:
74
76
77
78 //
79 // FBaseDynamicMeshSceneProxy API - subclasses must implement these functions
80 //
81
82
88
89
90
91 //
92 // RenderBuffer management
93 //
94
95
101
106
107
112 template<typename TriangleEnumerable>
115 const FDynamicMesh3* Mesh,
116 int NumTriangles, const TriangleEnumerable& Enumerable,
117 const FDynamicMeshUVOverlay* UVOverlay,
118 const FDynamicMeshNormalOverlay* NormalOverlay,
119 const FDynamicMeshColorOverlay* ColorOverlay,
120 TFunctionRef<void(int, int, int, const FVector3f&, FVector3f&, FVector3f&)> TangentsFunc,
121 bool bTrackTriangles = false,
122 bool bParallel = false)
123 {
124 MeshRenderBufferSetConverter.InitializeBuffersFromOverlays(RenderBuffers, Mesh, NumTriangles, Enumerable, UVOverlay, NormalOverlay, ColorOverlay, TangentsFunc, bTrackTriangles, bParallel);
125 }
126
127
128
133 template<typename TriangleEnumerable, typename UVOverlayListAllocator>
136 const FDynamicMesh3* Mesh,
137 int NumTriangles, const TriangleEnumerable& Enumerable,
139 const FDynamicMeshNormalOverlay* NormalOverlay,
140 const FDynamicMeshColorOverlay* ColorOverlay,
141 TFunctionRef<void(int, int, int, const FVector3f&, FVector3f&, FVector3f&)> TangentsFunc,
142 bool bTrackTriangles = false,
143 bool bParallel = false)
144 {
146 }
147
148
149
150
163
164
176
177
178
183 template<typename TriangleEnumerable>
186 const FDynamicMesh3* Mesh,
187 int NumTriangles, const TriangleEnumerable& Enumerable,
188 const FDynamicMeshNormalOverlay* NormalOverlay,
189 const FDynamicMeshColorOverlay* ColorOverlay,
190 TFunctionRef<void(int, int, int, const FVector3f&, FVector3f&, FVector3f&)> TangentsFunc,
191 bool bUpdatePositions = true,
192 bool bUpdateNormals = false,
193 bool bUpdateColors = false)
194 {
195 MeshRenderBufferSetConverter.UpdateVertexBuffersFromOverlays(RenderBuffers, Mesh, NumTriangles, Enumerable, NormalOverlay, ColorOverlay, TangentsFunc, bUpdatePositions, bUpdateNormals, bUpdateColors);
196 }
197
202 template<typename TriangleEnumerable, typename UVOverlayListAllocator>
211
212
217
222
227 {
229 }
230
231
238
239
240 //
241 // FBaseDynamicMeshSceneProxy implementation
242 //
243
248
253 const TArray<const FSceneView*>& Views,
254 const FSceneViewFamily& ViewFamily,
255 uint32 VisibilityMap,
256 FMeshElementCollector& Collector) const override;
257
258protected:
263 const FEngineShowFlags& EngineShowFlags, bool bDrawCollisionView, bool bDrawSimpleCollision, bool bDrawComplexCollision,
264 bool bProxyIsSelected,
265 const TArray<const FSceneView*>& Views, uint32 VisibilityMap,
266 FMeshElementCollector& Collector) const;
267public:
268
270
271 // Whether to allow use of the static draw path. If false, the dynamic draw path will be used instead.
272 GEOMETRYFRAMEWORK_API virtual bool AllowStaticDrawPath(const FSceneView* View) const;
273
281 bool bWireframe,
282 ESceneDepthPriorityGroup DepthPriority,
283 int ViewIndex,
285
286 // Like FStaticMeshSceneProxy, only override CreateHitProxies in editor, where component may have CreateMeshHitProxy
287#if WITH_EDITOR
290#endif // WITH_EDITOR
291
292 //
293 // Raytracing APIs
294 //
295
296#if RHI_RAYTRACING
297
298 GEOMETRYFRAMEWORK_API virtual bool IsRayTracingRelevant() const override;
299 GEOMETRYFRAMEWORK_API virtual bool HasRayTracingRepresentation() const override;
300
302
303
311 FRayTracingGeometry& RayTracingGeometry,
313 ESceneDepthPriorityGroup DepthPriority,
315
316
317#endif // RHI_RAYTRACING
318
319
320 //
321 // Lumen APIs
322 //
323
324
325public:
327
328protected:
330
331 UE_DEPRECATED(5.6, "Use MeshCards.IsValid() instead")
333
334 // Helper to set lumen cards
336
337
339 UE_DEPRECATED(5.6, "Distance field support is deprecated for dynamic mesh components")
341 UE_DEPRECATED(5.6, "Distance field support is deprecated for dynamic mesh components")
343public:
344 UE_DEPRECATED(5.6, "Distance field support is deprecated for dynamic mesh components")
346 const FDynamicMesh3& Mesh,
347 FProgressCancel& Progress,
348 float DistanceFieldResolutionScale = 1.0,
350
351 UE_DEPRECATED(5.6, "Distance field support is deprecated for dynamic mesh components")
353
354public:
355 // Set the collision data to use for debug drawing, or do nothing if debug drawing is not enabled
357
358#if UE_ENABLE_DEBUG_DRAWING
359private:
360 // If debug drawing is enabled, we store collision data here so that collision shapes can be rendered when requested by showflags
361
362 bool bOwnerIsNull = true;
364 bool bHasCollisionData = false;
366 bool bHasComplexMeshData = false;
368 ECollisionTraceFlag CollisionTraceFlag;
370 FCollisionResponseContainer CollisionResponse;
373
374 // Control access to collision data for debug rendering
376
377#endif
378
380
381};
ECollisionTraceFlag
Definition BodySetupEnums.h:11
#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::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
ESceneDepthPriorityGroup
Definition EngineTypes.h:187
const bool
Definition NetworkReplayStreaming.h:178
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition BaseDynamicMeshSceneProxy.h:39
void SetVerifyUsedMaterials(const bool bState)
Definition BaseDynamicMeshSceneProxy.h:226
FCriticalSection AllocatedSetsLock
Definition BaseDynamicMeshSceneProxy.h:58
void InitializeBuffersFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int NumTriangles, const TriangleEnumerable &Enumerable, const TArray< const FDynamicMeshUVOverlay *, UVOverlayListAllocator > &UVOverlays, const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshColorOverlay *ColorOverlay, TFunctionRef< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> TangentsFunc, bool bTrackTriangles=false, bool bParallel=false)
Definition BaseDynamicMeshSceneProxy.h:134
void RecomputeRenderBufferTriangleIndexSets(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh)
Definition BaseDynamicMeshSceneProxy.h:170
virtual GEOMETRYFRAMEWORK_API void DrawStaticElements(FStaticPrimitiveDrawInterface *PDI) override
Definition BaseDynamicMeshSceneProxy.cpp:557
virtual GEOMETRYFRAMEWORK_API void UpdatedReferencedMaterials()
Definition BaseDynamicMeshSceneProxy.cpp:126
FMeshRenderBufferSetConversionUtil MeshRenderBufferSetConverter
Definition BaseDynamicMeshSceneProxy.h:49
virtual GEOMETRYFRAMEWORK_API FMeshRenderBufferSet * AllocateNewRenderBufferSet()
Definition BaseDynamicMeshSceneProxy.cpp:88
virtual GEOMETRYFRAMEWORK_API void GetDynamicMeshElements(const TArray< const FSceneView * > &Views, const FSceneViewFamily &ViewFamily, uint32 VisibilityMap, FMeshElementCollector &Collector) const override
Definition BaseDynamicMeshSceneProxy.cpp:191
bool bDistanceFieldValid
Definition BaseDynamicMeshSceneProxy.h:342
void UpdateVertexBuffersFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int NumTriangles, const TriangleEnumerable &Enumerable, const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshColorOverlay *ColorOverlay, TFunctionRef< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> TangentsFunc, bool bUpdatePositions=true, bool bUpdateNormals=false, bool bUpdateColors=false)
Definition BaseDynamicMeshSceneProxy.h:184
void UpdateVertexUVBufferFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int32 NumTriangles, const TriangleEnumerable &Enumerable, const TArray< const FDynamicMeshUVOverlay *, UVOverlayListAllocator > &UVOverlays)
Definition BaseDynamicMeshSceneProxy.h:203
void InitializeBuffersFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int NumTriangles, const TriangleEnumerable &Enumerable, const FDynamicMeshUVOverlay *UVOverlay, const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshColorOverlay *ColorOverlay, TFunctionRef< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> TangentsFunc, bool bTrackTriangles=false, bool bParallel=false)
Definition BaseDynamicMeshSceneProxy.h:113
virtual GEOMETRYFRAMEWORK_API bool AllowStaticDrawPath(const FSceneView *View) const
Definition BaseDynamicMeshSceneProxy.cpp:529
virtual GEOMETRYFRAMEWORK_API void ReleaseRenderBufferSet(FMeshRenderBufferSet *BufferSet)
Definition BaseDynamicMeshSceneProxy.cpp:103
static GEOMETRYFRAMEWORK_API FMaterialRenderProxy * GetEngineVertexColorMaterialProxy(FMeshElementCollector &Collector, const FEngineShowFlags &EngineShowFlags, bool bProxyIsSelected, bool bIsHovered)
Definition BaseDynamicMeshSceneProxy.cpp:148
bool bPreferStaticDrawPath
Definition BaseDynamicMeshSceneProxy.h:70
virtual GEOMETRYFRAMEWORK_API ~FBaseDynamicMeshSceneProxy()
Definition BaseDynamicMeshSceneProxy.cpp:78
virtual GEOMETRYFRAMEWORK_API const FCardRepresentationData * GetMeshCardRepresentation() const override
Definition BaseDynamicMeshSceneProxy.cpp:825
virtual void GetActiveRenderBufferSets(TArray< FMeshRenderBufferSet * > &Buffers) const =0
void UpdateSecondaryTriangleBuffer(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, bool bDuplicate)
Definition BaseDynamicMeshSceneProxy.h:156
virtual GEOMETRYFRAMEWORK_API int32 GetNumMaterials() const
Definition BaseDynamicMeshSceneProxy.cpp:115
static TUniquePtr< FDistanceFieldVolumeData > ComputeDistanceFieldForMesh(const FDynamicMesh3 &Mesh, FProgressCancel &Progress, float DistanceFieldResolutionScale=1.0, bool bGenerateAsIfTwoSided=false)
Definition BaseDynamicMeshSceneProxy.cpp:858
bool bMeshCardsValid
Definition BaseDynamicMeshSceneProxy.h:332
virtual GEOMETRYFRAMEWORK_API UMaterialInterface * GetMaterial(int32 k) const
Definition BaseDynamicMeshSceneProxy.cpp:120
TSet< FMeshRenderBufferSet * > AllocatedBufferSets
Definition BaseDynamicMeshSceneProxy.h:55
bool bTwoSided
Definition BaseDynamicMeshSceneProxy.h:61
TPimplPtr< FCardRepresentationData > MeshCards
Definition BaseDynamicMeshSceneProxy.h:329
GEOMETRYFRAMEWORK_API void SetNewDistanceField(TSharedPtr< FDistanceFieldVolumeData > NewDistanceField, bool bInInitialize)
Definition BaseDynamicMeshSceneProxy.cpp:867
virtual GEOMETRYFRAMEWORK_API void DrawBatch(FMeshElementCollector &Collector, const FMeshRenderBufferSet &RenderBuffers, const FDynamicMeshIndexBuffer32 &IndexBuffer, FMaterialRenderProxy *UseMaterial, bool bWireframe, ESceneDepthPriorityGroup DepthPriority, int ViewIndex, FDynamicPrimitiveUniformBuffer &DynamicPrimitiveUniformBuffer) const
Definition BaseDynamicMeshSceneProxy.cpp:466
UBaseDynamicMeshComponent * ParentBaseComponent
Definition BaseDynamicMeshSceneProxy.h:43
bool bEnableRaytracing
Definition BaseDynamicMeshSceneProxy.h:64
void UpdateLumenCardsFromBounds()
Definition BaseDynamicMeshSceneProxy.cpp:831
GEOMETRYFRAMEWORK_API void SetCollisionData()
Definition BaseDynamicMeshSceneProxy.cpp:651
GEOMETRYFRAMEWORK_API bool IsCollisionView(const FEngineShowFlags &EngineShowFlags, bool &bDrawSimpleCollision, bool &bDrawComplexCollision) const
Definition BaseDynamicMeshSceneProxy.cpp:165
virtual GEOMETRYFRAMEWORK_API void GetCollisionDynamicMeshElements(TArray< FMeshRenderBufferSet * > &Buffers, const FEngineShowFlags &EngineShowFlags, bool bDrawCollisionView, bool bDrawSimpleCollision, bool bDrawComplexCollision, bool bProxyIsSelected, const TArray< const FSceneView * > &Views, uint32 VisibilityMap, FMeshElementCollector &Collector) const
Definition BaseDynamicMeshSceneProxy.cpp:349
bool bEnableViewModeOverrides
Definition BaseDynamicMeshSceneProxy.h:67
Definition MeshCardBuild.h:142
Definition DistanceFieldAtlas.h:241
Definition DynamicMeshBuilder.h:228
Definition SceneManagement.h:1601
Definition MaterialRenderProxy.h:102
Definition MeshElementCollector.h:26
Definition MeshRenderBufferSet.h:39
Definition PrimitiveSceneProxy.h:296
virtual ENGINE_API HHitProxy * CreateHitProxies(UPrimitiveComponent *Component, TArray< TRefCountPtr< HHitProxy > > &OutHitProxies)
Definition PrimitiveSceneProxy.cpp:661
uint8 bVerifyUsedMaterials
Definition PrimitiveSceneProxy.h:1577
Definition ProgressCancel.h:187
Definition RayTracingGeometry.h:31
Definition SceneView.h:2212
Definition SceneView.h:1425
Definition SceneManagement.h:1293
Definition HitProxies.h:135
Definition ComponentInterfaces.h:59
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition RefCounting.h:454
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition BaseDynamicMeshComponent.h:130
Definition DynamicMesh3.h:108
Definition DynamicMeshAttributeSet.h:84
Definition DynamicMeshTriangleAttribute.h:604
Definition DynamicMeshOverlay.h:714
Definition MaterialInterface.h:296
Definition DistanceFieldAtlas.h:36
@ false
Definition radaudio_common.h:23
Definition EngineTypes.h:1339
Definition ShowFlags.h:56
Definition AggregateGeom.h:24
Definition MeshRenderBufferSet.h:298
void UpdateVertexBuffersFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int NumTriangles, const TriangleEnumerable &Enumerable, const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshColorOverlay *ColorOverlay, TFunctionRef< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> TangentsFunc, bool bUpdatePositions=true, bool bUpdateNormals=false, bool bUpdateColors=false)
Definition MeshRenderBufferSet.h:637
void GEOMETRYFRAMEWORK_API UpdateSecondaryTriangleBuffer(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, bool bDuplicate)
------------— FMeshRenderBufferSetConversionUtil ---------------— ///
Definition MeshRenderBufferSet.cpp:136
void UpdateVertexUVBufferFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int32 NumTriangles, const TriangleEnumerable &Enumerable, const TArray< const FDynamicMeshUVOverlay *, UVOverlayListAllocator > &UVOverlays)
Definition MeshRenderBufferSet.h:717
void GEOMETRYFRAMEWORK_API RecomputeRenderBufferTriangleIndexSets(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh)
Definition MeshRenderBufferSet.cpp:174
void InitializeBuffersFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int NumTriangles, const TriangleEnumerable &Enumerable, const FDynamicMeshUVOverlay *UVOverlay, const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshColorOverlay *ColorOverlay, TFunctionRef< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> TangentsFunc, bool bTrackTriangles=false, bool bParallel=false)
Definition MeshRenderBufferSet.h:357
Definition PimplPtr.h:50
Definition IndexTypes.h:27
Definition IndexTypes.h:158