UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MeshBatch.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7#include "EngineDefines.h"
9#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
10// previously included by GPUSceneWriter.h
12#include "ShaderParameters.h"
13#endif
14#include "HitProxies.h"
15#include "RHIDefinitions.h"
16#include "SceneDefinitions.h"
18#include "RHIResources.h"
19
20
21#define USE_MESH_BATCH_VALIDATION !UE_BUILD_SHIPPING
22
23class FIndexBuffer;
25class FMaterial;
29class FVertexFactory;
33struct FRenderBounds;
34template<typename TBufferStruct> class TUniformBuffer;
37
44{
45public:
46 inline bool IsBound() const { return GPUSceneWriteDelegate != nullptr; }
47
49 {
50 check( IsBound() );
51 return GPUSceneWriteDelegate;
52 }
53
54private:
56 FGPUSceneWriteDelegate* GPUSceneWriteDelegate = nullptr;
57};
58
61{
63 None = -1,
64
67
68 Num
69};
70
94
95// Flag used to mark a primtive ID as dynamic, and thus needing translation (by adding the offset from the dynamic primitive collector).
96inline constexpr int32 GPrimIDDynamicFlag = 1 << 31;
97
99{
106
108 inline bool IsValid() const
109 {
110 return IndexBuffer != NULL;
111 }
112};
113
115
124{
133
134 inline void SetPayloadDataFlags(uint16 Flags, bool bValue)
135 {
136 if (bValue)
137 {
139 }
140 else
141 {
143 }
144 }
145
154
160 {
161 uint32 Total = 0;
162
164 {
165 Total += 2;
166 }
168 {
169 Total += 1;
170 }
171
173 {
175 {
176 Total += 2;
177 }
178 else
179 {
180 Total += 3;
181 }
182 }
183
185 {
186 Total += 1;
187 }
188
190 {
191 Total += 1;
192 }
193
195 {
197 }
198
199 return Total;
200 }
201
202 inline void Validate(uint32 NumInstances) const
203 {
204#if DO_CHECK
205 // Ensure array views are sized exactly for all instances, or are empty and there is a GPU writer
206 const bool bGPUWrite = DataWriterGPU.IsBound();
207 checkf(uint32(InstanceSceneData.Num()) == NumInstances || (bGPUWrite && InstanceSceneData.Num() == 0),
208 TEXT("DynamicPrimitiveData provided should have %u instances in InstanceSceneData. Found %d"),
209 NumInstances, InstanceSceneData.Num());
211 {
212 checkf(uint32(InstanceDynamicData.Num()) == NumInstances || (bGPUWrite && InstanceDynamicData.Num() == 0),
213 TEXT("DynamicPrimitiveData provided should have %u elements in InstanceDynamicData. Found %d"),
214 NumInstances, InstanceDynamicData.Num());
215 }
217 {
219 TEXT("DynamicPrimitiveData provided has the custom data flag set, but NumInstanceCustomDataFloats == 0"));
221 TEXT("DynamicPrimitiveData provided should have %u elements in InstanceCustomData. Found %d"),
222 NumInstances * NumInstanceCustomDataFloats, InstanceCustomData.Num());
223 }
224#endif
225 }
226};
227
232{
238
244
247
250
256
257 union
258 {
263 };
264 const void* UserData;
265
266 // Meaning depends on the vertex factory, e.g. FGPUSkinPassthroughVertexFactory: element index in FGPUSkinCache::CachedElements
268
271
274
278
287
296
297#if UE_ENABLE_DEBUG_DRAWING
302#endif
303
311
312 inline int32 GetNumPrimitives() const
313 {
315 {
316 int32 Count = 0;
317 for (uint32 Run = 0; Run < NumInstances; Run++)
318 {
319 Count += NumPrimitives * (InstanceRuns[Run * 2 + 1] - InstanceRuns[Run * 2] + 1);
320 }
321 return Count;
322 }
323 else
324 {
326 }
327 }
328
360};
361
362// Helper functions for hair strands shaders
366
371{
373
376
379
380 // can be NULL
382
385
388
390 UE_DEPRECATED(5.6, "This is not used by the renderer.")
392
395
396 /* Mesh Id in a primitive. Used for stable sorting of draws belonging to the same primitive. **/
398
401
404
409 uint32 CastShadow : 1; // Whether it can be used in shadow renderpasses.
410 uint32 bUseForMaterial : 1; // Whether it can be used in renderpasses requiring material outputs.
411 uint32 bUseForDepthPass : 1; // Whether it can be used in depth pass.
412 uint32 bUseAsOccluder : 1; // Hint whether this mesh is a good occluder.
414 // e.g. PT_TriangleList(default), PT_LineList, ..
416 // e.g. SDPG_World (default), SDPG_Foreground
418
421
427
434
437
440
445
448
449#if RHI_RAYTRACING
450 uint32 CastRayTracedShadow : 1; // Whether it casts ray traced shadow.
451 uint32 bForceTwoSidedInRayTracing : 1; // Whether segment should be considered two sided in ray tracing regardless of material.
452#endif
453
459
462
465
466#if UE_ENABLE_DEBUG_DRAWING
469
472#endif
473
475
476 // todo: can be optimized with a single function that returns multiple states (Translucent, Decal, Masked)
478
480
482
484
485 inline int32 GetNumPrimitives() const
486 {
487 int32 Count = 0;
488 for (int32 ElementIdx = 0; ElementIdx < Elements.Num(); ++ElementIdx)
489 {
490 Count += Elements[ElementIdx].GetNumPrimitives();
491 }
492 return Count;
493 }
494
495 inline bool HasAnyDrawCalls() const
496 {
497 for (int32 ElementIdx = 0; ElementIdx < Elements.Num(); ++ElementIdx)
498 {
499 if (Elements[ElementIdx].GetNumPrimitives() > 0 || Elements[ElementIdx].IndirectArgsBuffer || Elements[ElementIdx].bFetchInstanceCountFromScene)
500 {
501 return true;
502 }
503 }
504 return false;
505 }
506
507 ENGINE_API void PreparePrimitiveUniformBuffer(const FPrimitiveSceneProxy* PrimitiveSceneProxy, ERHIFeatureLevel::Type FeatureLevel);
508
509#if USE_MESH_BATCH_VALIDATION
510 ENGINE_API bool Validate(const FPrimitiveSceneProxy* SceneProxy, ERHIFeatureLevel::Type FeatureLevel) const;
511#else
512 inline bool Validate(const FPrimitiveSceneProxy* SceneProxy, ERHIFeatureLevel::Type FeatureLevel) const { return true; }
513#endif
514
515 // Disable deprecation warnings for TessellationDisablingShadowMapMeshSize.
517
561
562 // Need to do these explicitly as clang otherwise produces deprecation warnings for the _implicit_ ctors & operators
564 ~FMeshBatch() = default;
565 FMeshBatch(const FMeshBatch&) = default;
566 FMeshBatch(FMeshBatch&&) = default;
567 FMeshBatch& operator=(const FMeshBatch&) = default;
569
571};
572
578
579
580
581
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_BUILD_TEST
Definition Build.h:17
#define UE_BUILD_SHIPPING
Definition Build.h:20
#define WITH_EDITOR
Definition Build.h:67
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#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
#define SDPG_NumBits
Definition EngineDefines.h:70
#define UE_ENABLE_DEBUG_DRAWING
Definition EngineDefines.h:15
@ SDPG_World
Definition EngineTypes.h:189
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
EGPUSceneGPUWritePass
Definition MeshBatch.h:61
EPrimitiveIdMode
Definition MeshBatch.h:72
@ PrimID_FromPrimitiveSceneInfo
Definition MeshBatch.h:77
@ PrimID_NumBits
Definition MeshBatch.h:92
@ PrimID_ForceZero
Definition MeshBatch.h:89
@ PrimID_Num
Definition MeshBatch.h:91
@ PrimID_DynamicPrimitiveShaderData
Definition MeshBatch.h:83
constexpr int32 GPrimIDDynamicFlag
Definition MeshBatch.h:96
ENGINE_API bool AreCompressedTransformsSupported()
Definition SceneManagement.cpp:34
ENGINE_API bool IsCompatibleWithHairStrands(const FMaterial *Material, const ERHIFeatureLevel::Type FeatureLevel)
Definition MaterialInterface.cpp:81
ENGINE_API bool IsHairStrandsGeometrySupported(const EShaderPlatform Platform)
Definition MaterialInterface.cpp:73
#define RHI_RAYTRACING
Definition RHIDefinitions.h:65
@ PT_NumBits
Definition RHIDefinitions.h:847
@ PT_TriangleList
Definition RHIDefinitions.h:824
EShaderPlatform
Definition RHIShaderPlatform.h:11
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
if(Failed) console_printf("Failed.\n")
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MeshBatch.h:44
bool IsBound() const
Definition MeshBatch.h:46
FGPUSceneWriteDelegate * operator->() const
Definition MeshBatch.h:48
Definition GPUSceneWriter.h:91
Definition HitProxies.h:86
Definition RenderResource.h:509
Definition SceneManagement.h:820
Definition MaterialRenderProxy.h:102
Definition MaterialShared.h:2058
Definition PrimitiveSceneProxy.h:296
Definition RHIResources.h:1581
Definition RHIResources.h:1232
Definition ShaderParameterMetadata.h:136
Definition SplineMeshSceneProxy.h:165
Definition VertexFactory.h:661
Definition Array.h:670
Definition UniformBuffer.h:29
Type
Definition RHIFeatureLevel.h:20
Definition RuntimeVirtualTexture.h:231
@ false
Definition radaudio_common.h:23
Definition Color.h:486
static CORE_API const FColor White
Definition Color.h:749
Definition InstanceUniformShaderParameters.h:44
Definition InstanceUniformShaderParameters.h:18
Definition MaterialShared.h:1181
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundUp(T Dividend, T Divisor)
Definition UnrealMathUtility.h:694
Definition MeshBatch.h:124
TConstArrayView< float > InstanceCustomData
Definition MeshBatch.h:128
EGPUSceneGPUWritePass DataWriterGPUPass
Definition MeshBatch.h:130
void Validate(uint32 NumInstances) const
Definition MeshBatch.h:202
uint32 GetPayloadFloat4Stride() const
Definition MeshBatch.h:159
TConstArrayView< FRenderBounds > InstanceLocalBounds
Definition MeshBatch.h:127
FGPUSceneWriteDelegateRef DataWriterGPU
Definition MeshBatch.h:129
uint32 NumInstanceCustomDataFloats
Definition MeshBatch.h:132
void SetPayloadDataFlags(uint16 Flags, bool bValue)
Definition MeshBatch.h:134
void SetNumInstanceCustomDataFloats(uint32 NumFloats)
Definition MeshBatch.h:149
void EnableInstanceLocalBounds(bool bEnable)
Definition MeshBatch.h:148
TConstArrayView< FInstanceDynamicData > InstanceDynamicData
Definition MeshBatch.h:126
void EnableInstanceDynamicData(bool bEnable)
Definition MeshBatch.h:146
uint16 PayloadDataFlags
Definition MeshBatch.h:131
void EnableInstanceSkinningData(bool bEnable)
Definition MeshBatch.h:147
TConstArrayView< FInstanceSceneData > InstanceSceneData
Definition MeshBatch.h:125
Definition MeshBatch.h:99
uint32 FirstIndex
Definition MeshBatch.h:103
uint32 PrimitiveType
Definition MeshBatch.h:105
bool IsValid() const
Definition MeshBatch.h:108
FIndexBuffer * IndexBuffer
Definition MeshBatch.h:101
Definition MeshBatch.h:232
uint32 NumPrimitives
Definition MeshBatch.h:277
FRHIUniformBuffer * PrimitiveUniformBuffer
Definition MeshBatch.h:237
uint32 bUserDataIsColorVertexBuffer
Definition MeshBatch.h:290
uint32 MinVertexIndex
Definition MeshBatch.h:282
float MinScreenSize
Definition MeshBatch.h:285
const FIndexBuffer * IndexBuffer
Definition MeshBatch.h:249
uint32 bForceInstanceCulling
Definition MeshBatch.h:293
uint32 DynamicPrimitiveIndex
Definition MeshBatch.h:309
const void * UserData
Definition MeshBatch.h:264
int32 GetNumPrimitives() const
Definition MeshBatch.h:312
FUniformBufferRHIRef LooseParametersUniformBuffer
Definition MeshBatch.h:246
FMeshBatchElement()
Definition MeshBatch.h:329
uint32 bPreserveInstanceOrder
Definition MeshBatch.h:294
uint32 InstancedLODRange
Definition MeshBatch.h:289
int32 VisualizeElementIndex
Definition MeshBatch.h:299
int32 UserIndex
Definition MeshBatch.h:284
FRHIBuffer * IndirectArgsBuffer
Definition MeshBatch.h:269
uint32 IndirectArgsOffset
Definition MeshBatch.h:270
uint32 InstancedLODIndex
Definition MeshBatch.h:288
FColor SkinCacheDebugColor
Definition MeshBatch.h:301
float MaxScreenSize
Definition MeshBatch.h:286
FMeshBatchElementDynamicIndexBuffer DynamicIndexBuffer
Definition MeshBatch.h:255
uint32 DynamicPrimitiveInstanceSceneDataOffset
Definition MeshBatch.h:310
uint32 * InstanceRuns
Definition MeshBatch.h:260
uint32 bIsSplineProxy
Definition MeshBatch.h:291
uint32 BaseVertexIndex
Definition MeshBatch.h:281
void * VertexFactoryUserData
Definition MeshBatch.h:267
uint32 MaxVertexIndex
Definition MeshBatch.h:283
EPrimitiveIdMode PrimitiveIdMode
Definition MeshBatch.h:273
const class FSplineMeshSceneProxy * SplineMeshSceneProxy
Definition MeshBatch.h:262
uint32 bIsInstanceRuns
Definition MeshBatch.h:292
uint32 FirstIndex
Definition MeshBatch.h:275
uint32 NumInstances
Definition MeshBatch.h:280
const FMeshBatchDynamicPrimitiveData * DynamicPrimitiveData
Definition MeshBatch.h:308
uint32 bFetchInstanceCountFromScene
Definition MeshBatch.h:295
const TUniformBuffer< FPrimitiveUniformShaderParameters > * PrimitiveUniformBufferResource
Definition MeshBatch.h:243
Definition MeshBatch.h:371
uint32 bUseForMaterial
Definition MeshBatch.h:410
~FMeshBatch()=default
uint32 RuntimeVirtualTextureMaterialType
Definition MeshBatch.h:444
FMeshBatch(const FMeshBatch &)=default
int8 VisualizeLODIndex
Definition MeshBatch.h:471
uint32 bSelectable
Definition MeshBatch.h:436
uint32 bUseForWaterInfoTextureDepth
Definition MeshBatch.h:461
const FLightCacheInterface * LCI
Definition MeshBatch.h:381
FMeshBatch(FMeshBatch &&)=default
PRAGMA_DISABLE_DEPRECATION_WARNINGS FMeshBatch()
Definition MeshBatch.h:519
FHitProxyId BatchHitProxyId
Definition MeshBatch.h:384
const FMaterialRenderProxy * MaterialRenderProxy
Definition MeshBatch.h:378
ENGINE_API bool UseForHairStrands(ERHIFeatureLevel::Type InFeatureLevel) const
Definition MeshBatch.cpp:26
uint32 Type
Definition MeshBatch.h:415
uint32 DepthPriorityGroup
Definition MeshBatch.h:417
FMeshBatch & operator=(FMeshBatch &&)=default
uint32 bUseSelectionOutline
Definition MeshBatch.h:433
uint32 bDitheredLODTransition
Definition MeshBatch.h:439
uint16 MeshIdInPrimitive
Definition MeshBatch.h:397
bool HasAnyDrawCalls() const
Definition MeshBatch.h:495
uint32 bCanApplyViewModeOverrides
Definition MeshBatch.h:420
int32 GetNumPrimitives() const
Definition MeshBatch.h:485
uint32 bUseForDepthPass
Definition MeshBatch.h:411
FMeshBatch & operator=(const FMeshBatch &)=default
uint32 bRenderToVirtualTexture
Definition MeshBatch.h:442
ENGINE_API bool IsDualBlend(ERHIFeatureLevel::Type InFeatureLevel) const
Definition MeshBatch.cpp:20
uint32 bUseForLumenSurfaceCacheCapture
Definition MeshBatch.h:464
ENGINE_API bool Validate(const FPrimitiveSceneProxy *SceneProxy, ERHIFeatureLevel::Type FeatureLevel) const
uint32 bUseWireframeSelectionColoring
Definition MeshBatch.h:426
int32 SegmentIndex
Definition MeshBatch.h:394
uint32 ReverseCulling
Definition MeshBatch.h:402
uint32 bWireframe
Definition MeshBatch.h:413
int32 DynamicMeshBoundsIndex
Definition MeshBatch.h:387
uint32 bDisableBackfaceCulling
Definition MeshBatch.h:403
ENGINE_API void PreparePrimitiveUniformBuffer(const FPrimitiveSceneProxy *PrimitiveSceneProxy, ERHIFeatureLevel::Type FeatureLevel)
Definition SceneManagement.cpp:1590
const FVertexFactory * VertexFactory
Definition MeshBatch.h:375
float TessellationDisablingShadowMapMeshSize
Definition MeshBatch.h:391
ENGINE_API bool IsMasked(ERHIFeatureLevel::Type InFeatureLevel) const
Definition MeshBatch.cpp:37
uint32 bViewDependentArguments
Definition MeshBatch.h:458
ENGINE_API bool IsDecal(ERHIFeatureLevel::Type InFeatureLevel) const
Definition MeshBatch.cpp:13
ENGINE_API bool IsTranslucent(ERHIFeatureLevel::Type InFeatureLevel) const
Definition MeshBatch.cpp:7
uint32 bOverlayMaterial
Definition MeshBatch.h:447
TArray< FMeshBatchElement, TInlineAllocator< 1 > > Elements
Definition MeshBatch.h:372
int8 LODIndex
Definition MeshBatch.h:400
int8 VisualizeHLODIndex
Definition MeshBatch.h:468
FMeshBatch(FMeshBatch &)=default
uint32 CastShadow
Definition MeshBatch.h:409
uint32 bUseAsOccluder
Definition MeshBatch.h:412
Definition RenderTransform.h:272
Definition MeshBatch.h:574
const FShaderParametersMetadata * Type
Definition MeshBatch.h:575
FRHIUniformBuffer * UniformBuffer
Definition MeshBatch.h:576