UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MeshDrawCommands.cpp File Reference
#include "MeshDrawCommands.h"
#include "BasePassRendering.h"
#include "RendererModule.h"
#include "ScenePrivate.h"
#include "TranslucentRendering.h"
#include "InstanceCulling/InstanceCullingManager.h"
#include "StaticMeshBatch.h"
#include "SceneDefinitions.h"
#include "MeshDrawCommandStats.h"

Classes

class  FMeshDrawCommandPassSetupTask
 
class  FMeshDrawCommandInitResourcesTask
 
class  FDrawVisibleMeshCommandsAnyThreadTask
 

Functions

uint32 BitInvertIfNegativeFloat (uint32 f)
 
void UpdateTranslucentMeshSortKeys (ETranslucentSortPolicy::Type TranslucentSortPolicy, const FVector &TranslucentSortAxis, const FVector &ViewOrigin, const FMatrix &ViewMatrix, const TScenePrimitiveArray< FPrimitiveBounds > &PrimitiveBounds, ETranslucencyPass::Type TranslucencyPass, bool bInverseSorting, FMeshCommandOneFrameArray &VisibleMeshCommands)
 
void MergeMobileBasePassMeshDrawCommands (const FMobileCSMVisibilityInfo &MobileCSMVisibilityInfo, int32 ScenePrimitiveNum, FMeshCommandOneFrameArray &MeshCommands, FMeshCommandOneFrameArray &MeshCommandsCSM)
 
void UpdateMobilePassMeshSortKeys (const FVector &ViewOrigin, const TScenePrimitiveArray< FPrimitiveBounds > &ScenePrimitiveBounds, FMeshCommandOneFrameArray &VisibleMeshCommands)
 
FORCEINLINE int32 TranslatePrimitiveId (int32 DrawPrimitiveIdIn, int32 DynamicPrimitiveIdOffset, int32 DynamicPrimitiveIdMax)
 
void GenerateDynamicMeshDrawCommands (const FViewInfo &View, EShadingPath ShadingPath, EMeshPass::Type PassType, FMeshPassProcessor *PassMeshProcessor, const TArray< FMeshBatchAndRelevance, SceneRenderingAllocator > &DynamicMeshElements, const TArray< FMeshPassMask, SceneRenderingAllocator > *DynamicMeshElementsPassRelevance, int32 MaxNumDynamicMeshElements, const TArray< const FStaticMeshBatch *, SceneRenderingAllocator > &DynamicMeshCommandBuildRequests, const TArray< EMeshDrawCommandCullingPayloadFlags, SceneRenderingAllocator > DynamicMeshCommandBuildFlags, int32 MaxNumBuildRequestElements, FMeshCommandOneFrameArray &VisibleCommands, FDynamicMeshDrawCommandStorage &MeshDrawCommandStorage, FGraphicsMinimalPipelineStateSet &MinimalPipelineStatePassSet, bool &NeedsShaderInitialisation)
 
void GenerateMobileBasePassDynamicMeshDrawCommands (const FViewInfo &View, EShadingPath ShadingPath, EMeshPass::Type PassType, FMeshPassProcessor *PassMeshProcessor, FMeshPassProcessor *MobilePassCSMPassMeshProcessor, const TArray< FMeshBatchAndRelevance, SceneRenderingAllocator > &DynamicMeshElements, const TArray< FMeshPassMask, SceneRenderingAllocator > *DynamicMeshElementsPassRelevance, int32 MaxNumDynamicMeshElements, const TArray< const FStaticMeshBatch *, SceneRenderingAllocator > &DynamicMeshCommandBuildRequests, const TArray< EMeshDrawCommandCullingPayloadFlags, SceneRenderingAllocator > DynamicMeshCommandBuildFlags, int32 MaxNumBuildRequestElements, FMeshCommandOneFrameArray &VisibleCommands, FDynamicMeshDrawCommandStorage &MeshDrawCommandStorage, FGraphicsMinimalPipelineStateSet &GraphicsMinimalPipelineStateSet, bool &NeedsShaderInitialisation)
 
void ApplyViewOverridesToMeshDrawCommands (EShadingPath ShadingPath, EMeshPass::Type PassType, bool bReverseCulling, bool bRenderSceneTwoSided, FExclusiveDepthStencil::Type BasePassDepthStencilAccess, FExclusiveDepthStencil::Type DefaultBasePassDepthStencilAccess, FMeshCommandOneFrameArray &VisibleMeshDrawCommands, FDynamicMeshDrawCommandStorage &MeshDrawCommandStorage, FGraphicsMinimalPipelineStateSet &MinimalPipelineStatePassSet, bool &NeedsShaderInitialisation, FMeshCommandOneFrameArray &TempVisibleMeshDrawCommands)
 
void CollectMeshDrawCommandPassStats (FMeshCommandOneFrameArray &VisibleMeshDrawCommands, FInstanceCullingContext &InstanceCullingContext)
 
void SortAndMergeDynamicPassMeshDrawCommands (const FSceneView &SceneView, FRHICommandList &RHICmdList, FMeshCommandOneFrameArray &VisibleMeshDrawCommands, FDynamicMeshDrawCommandStorage &MeshDrawCommandStorage, FRHIBuffer *&OutPrimitiveIdVertexBuffer, uint32 InstanceFactor, const FGPUScenePrimitiveCollector *DynamicPrimitiveCollector)
 

Variables

TGlobalResource< FPrimitiveIdVertexBufferPoolGPrimitiveIdVertexBufferPool
 
FAutoConsoleTaskPriority CPrio_FMeshDrawCommandPassSetupTask (TEXT("TaskGraph.TaskPriorities.FMeshDrawCommandPassSetupTask"), TEXT("Task and thread priority for FMeshDrawCommandPassSetupTask."), ENamedThreads::NormalThreadPriority, ENamedThreads::HighTaskPriority)
 

Function Documentation

◆ ApplyViewOverridesToMeshDrawCommands()

void ApplyViewOverridesToMeshDrawCommands ( EShadingPath  ShadingPath,
EMeshPass::Type  PassType,
bool  bReverseCulling,
bool  bRenderSceneTwoSided,
FExclusiveDepthStencil::Type  BasePassDepthStencilAccess,
FExclusiveDepthStencil::Type  DefaultBasePassDepthStencilAccess,
FMeshCommandOneFrameArray VisibleMeshDrawCommands,
FDynamicMeshDrawCommandStorage MeshDrawCommandStorage,
FGraphicsMinimalPipelineStateSet MinimalPipelineStatePassSet,
bool NeedsShaderInitialisation,
FMeshCommandOneFrameArray TempVisibleMeshDrawCommands 
)

Apply view overrides to existing mesh draw commands (e.g. reverse culling mode for rendering planar reflections). TempVisibleMeshDrawCommands must be presized for NewPassVisibleMeshDrawCommands.

◆ BitInvertIfNegativeFloat()

uint32 BitInvertIfNegativeFloat ( uint32  f)

◆ CollectMeshDrawCommandPassStats()

void CollectMeshDrawCommandPassStats ( FMeshCommandOneFrameArray VisibleMeshDrawCommands,
FInstanceCullingContext InstanceCullingContext 
)

◆ GenerateDynamicMeshDrawCommands()

void GenerateDynamicMeshDrawCommands ( const FViewInfo View,
EShadingPath  ShadingPath,
EMeshPass::Type  PassType,
FMeshPassProcessor PassMeshProcessor,
const TArray< FMeshBatchAndRelevance, SceneRenderingAllocator > &  DynamicMeshElements,
const TArray< FMeshPassMask, SceneRenderingAllocator > *  DynamicMeshElementsPassRelevance,
int32  MaxNumDynamicMeshElements,
const TArray< const FStaticMeshBatch *, SceneRenderingAllocator > &  DynamicMeshCommandBuildRequests,
const TArray< EMeshDrawCommandCullingPayloadFlags, SceneRenderingAllocator DynamicMeshCommandBuildFlags,
int32  MaxNumBuildRequestElements,
FMeshCommandOneFrameArray VisibleCommands,
FDynamicMeshDrawCommandStorage MeshDrawCommandStorage,
FGraphicsMinimalPipelineStateSet MinimalPipelineStatePassSet,
bool NeedsShaderInitialisation 
)

Converts each FMeshBatch into a set of FMeshDrawCommands for a specific mesh pass type.

◆ GenerateMobileBasePassDynamicMeshDrawCommands()

void GenerateMobileBasePassDynamicMeshDrawCommands ( const FViewInfo View,
EShadingPath  ShadingPath,
EMeshPass::Type  PassType,
FMeshPassProcessor PassMeshProcessor,
FMeshPassProcessor MobilePassCSMPassMeshProcessor,
const TArray< FMeshBatchAndRelevance, SceneRenderingAllocator > &  DynamicMeshElements,
const TArray< FMeshPassMask, SceneRenderingAllocator > *  DynamicMeshElementsPassRelevance,
int32  MaxNumDynamicMeshElements,
const TArray< const FStaticMeshBatch *, SceneRenderingAllocator > &  DynamicMeshCommandBuildRequests,
const TArray< EMeshDrawCommandCullingPayloadFlags, SceneRenderingAllocator DynamicMeshCommandBuildFlags,
int32  MaxNumBuildRequestElements,
FMeshCommandOneFrameArray VisibleCommands,
FDynamicMeshDrawCommandStorage MeshDrawCommandStorage,
FGraphicsMinimalPipelineStateSet GraphicsMinimalPipelineStateSet,
bool NeedsShaderInitialisation 
)

Special version of GenerateDynamicMeshDrawCommands for the mobile base pass. Based on CSM visibility it will generate mesh draw commands using either normal base pass processor or CSM base pass processor.

◆ MergeMobileBasePassMeshDrawCommands()

void MergeMobileBasePassMeshDrawCommands ( const FMobileCSMVisibilityInfo MobileCSMVisibilityInfo,
int32  ScenePrimitiveNum,
FMeshCommandOneFrameArray MeshCommands,
FMeshCommandOneFrameArray MeshCommandsCSM 
)

Merge mobile BasePass with BasePassCSM based on CSM visibility in order to select appropriate shader for given command.

◆ SortAndMergeDynamicPassMeshDrawCommands()

void SortAndMergeDynamicPassMeshDrawCommands ( const FSceneView SceneView,
FRHICommandList RHICmdList,
FMeshCommandOneFrameArray VisibleMeshDrawCommands,
FDynamicMeshDrawCommandStorage MeshDrawCommandStorage,
FRHIBuffer *&  OutPrimitiveIdVertexBuffer,
uint32  InstanceFactor,
const FGPUScenePrimitiveCollector DynamicPrimitiveCollector 
)

◆ TranslatePrimitiveId()

FORCEINLINE int32 TranslatePrimitiveId ( int32  DrawPrimitiveIdIn,
int32  DynamicPrimitiveIdOffset,
int32  DynamicPrimitiveIdMax 
)

◆ UpdateMobilePassMeshSortKeys()

void UpdateMobilePassMeshSortKeys ( const FVector ViewOrigin,
const TScenePrimitiveArray< FPrimitiveBounds > &  ScenePrimitiveBounds,
FMeshCommandOneFrameArray VisibleMeshCommands 
)

Compute mesh sort keys for the mobile base pass

◆ UpdateTranslucentMeshSortKeys()

void UpdateTranslucentMeshSortKeys ( ETranslucentSortPolicy::Type  TranslucentSortPolicy,
const FVector TranslucentSortAxis,
const FVector ViewOrigin,
const FMatrix ViewMatrix,
const TScenePrimitiveArray< FPrimitiveBounds > &  PrimitiveBounds,
ETranslucencyPass::Type  TranslucencyPass,
bool  bInverseSorting,
FMeshCommandOneFrameArray VisibleMeshCommands 
)

Update mesh sort keys with view dependent data.

Variable Documentation

◆ CPrio_FMeshDrawCommandPassSetupTask

FAutoConsoleTaskPriority CPrio_FMeshDrawCommandPassSetupTask(TEXT("TaskGraph.TaskPriorities.FMeshDrawCommandPassSetupTask"), TEXT("Task and thread priority for FMeshDrawCommandPassSetupTask."), ENamedThreads::NormalThreadPriority, ENamedThreads::HighTaskPriority) ( TEXT("TaskGraph.TaskPriorities.FMeshDrawCommandPassSetupTask")  ,
TEXT("Task and thread priority for FMeshDrawCommandPassSetupTask." ,
ENamedThreads::NormalThreadPriority  ,
ENamedThreads::HighTaskPriority   
)

◆ GPrimitiveIdVertexBufferPool

TGlobalResource<FPrimitiveIdVertexBufferPool> GPrimitiveIdVertexBufferPool