UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LocalVertexFactory.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"
6#include "ShaderParameters.h"
7#include "Components.h"
8#include "VertexFactory.h"
10
11class FMaterial;
12class FSceneView;
14
15/*=============================================================================
16 LocalVertexFactory.h: Local vertex factory definitions.
17=============================================================================*/
18
22 SHADER_PARAMETER(uint32,LODLightmapDataIndex)
29
32 const class FLocalVertexFactory* VertexFactory,
33 uint32 LODLightmapDataIndex,
34 class FColorVertexBuffer* OverrideColorVertexBuffer,
37 );
38
40 const class FLocalVertexFactory* VertexFactory,
41 uint32 LODLightmapDataIndex,
42 class FColorVertexBuffer* OverrideColorVertexBuffer,
45 );
46
51{
53public:
54
56
58
60 {
62 FRHIShaderResourceView* PreSkinPositionComponentSRV = nullptr;
63 #if WITH_EDITORONLY_DATA
64 const class UStaticMesh* StaticMesh = nullptr;
65 bool bIsCoarseProxy = false;
66 #endif
67 };
68
72 static ENGINE_API bool ShouldCompilePermutation(const FVertexFactoryShaderPermutationParameters& Parameters);
73 static ENGINE_API void ModifyCompilationEnvironment(const FVertexFactoryShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment);
74 static ENGINE_API void ValidateCompiledResult(const FVertexFactoryType* Type, EShaderPlatform Platform, const FShaderParameterMap& ParameterMap, TArray<FString>& OutErrors);
75
76 static ENGINE_API void GetPSOPrecacheVertexFetchElements(EVertexInputStreamType VertexInputStreamType, FVertexDeclarationElementList& Elements);
77 static ENGINE_API void GetVertexElements(ERHIFeatureLevel::Type FeatureLevel, EVertexInputStreamType InputStreamType, bool bSupportsManualVertexFetch, FDataType& Data, FVertexDeclarationElementList& Elements);
78
82 ENGINE_API void SetData(FRHICommandListBase& RHICmdList, const FDataType& InData);
83
84 UE_DEPRECATED(5.4, "SetData requires a command list.")
85 ENGINE_API void SetData(const FDataType& InData);
86
92
93 // FRenderResource interface.
94 ENGINE_API virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
95 virtual void ReleaseRHI() override
96 {
97 UniformBuffer.SafeRelease();
99 }
100
101 UE_DEPRECATED(5.5, "SetColorOverrideStream is no longer used")
102 inline void SetColorOverrideStream(FRHICommandList& RHICmdList, const FVertexBuffer* ColorVertexBuffer) const
103 {
104 checkf(ColorVertexBuffer->IsInitialized(), TEXT("Color Vertex buffer was not initialized! Name %s"), *ColorVertexBuffer->GetFriendlyName());
105 checkf(IsInitialized() && EnumHasAnyFlags(EVertexStreamUsage::Overridden, Data.ColorComponent.VertexStreamUsage) && ColorStreamIndex > 0, TEXT("Per-mesh colors with bad stream setup! Name %s"), *ColorVertexBuffer->GetFriendlyName());
106 RHICmdList.SetStreamSource(ColorStreamIndex, ColorVertexBuffer->VertexBufferRHI, 0);
107 }
108
109 void GetColorOverrideStream(const FVertexBuffer* ColorVertexBuffer, FVertexInputStreamArray& VertexStreams) const
110 {
111 checkf(ColorVertexBuffer->IsInitialized(), TEXT("Color Vertex buffer was not initialized! Name %s"), *ColorVertexBuffer->GetFriendlyName());
112 checkf(IsInitialized() && EnumHasAnyFlags(EVertexStreamUsage::Overridden, Data.ColorComponent.VertexStreamUsage) && ColorStreamIndex > 0, TEXT("Per-mesh colors with bad stream setup! Name %s"), *ColorVertexBuffer->GetFriendlyName());
113
114 VertexStreams.Add(FVertexInputStream(ColorStreamIndex, 0, ColorVertexBuffer->VertexBufferRHI));
115 }
116
118 {
119 return GetPositionsSRV();
120 }
121
123 {
124 return Data.PositionComponentSRV;
125 }
126
128 {
129 return Data.PreSkinPositionComponentSRV ? Data.PreSkinPositionComponentSRV : GNullColorVertexBuffer.VertexBufferSRV.GetReference();
130 }
131
133 {
134 return Data.TangentsSRV;
135 }
136
138 {
139 return Data.TextureCoordinatesSRV;
140 }
141
143 {
144 return Data.ColorComponentsSRV;
145 }
146
147 inline const uint32 GetColorIndexMask() const
148 {
149 return Data.ColorIndexMask;
150 }
151
152 inline const int GetLightMapCoordinateIndex() const
153 {
154 return Data.LightMapCoordinateIndex;
155 }
156
157 inline const int GetNumTexcoords() const
158 {
159 return Data.NumTexCoords;
160 }
161
163 {
164 return UniformBuffer.GetReference();
165 }
166
167#if WITH_EDITORONLY_DATA
168 virtual bool IsCoarseProxyMesh() const override { return Data.bIsCoarseProxy; }
169
170 inline const class UStaticMesh* GetStaticMesh() const { return Data.StaticMesh; }
171#endif
172
173protected:
176
177 const FDataType& GetData() const { return Data; }
178
179 static ENGINE_API void GetVertexElements(
182 bool bSupportsManualVertexFetch,
183 FDataType& Data,
185 FVertexStreamList& InOutStreams,
187
190
192
193 bool bGPUSkinPassThrough = false;
194
196 {
198#if !UE_BUILD_SHIPPING
199 : DebugName(InDebugName)
200#endif
201 {}
202 private:
203#if !UE_BUILD_SHIPPING
204 const char* DebugName;
205#endif
206 } DebugName;
207};
208
213{
215public:
216 ENGINE_API void Bind(const FShaderParameterMap& ParameterMap);
217
219 const class FSceneInterface* Scene,
220 const FSceneView* View,
223 ERHIFeatureLevel::Type FeatureLevel,
224 const FVertexFactory* VertexFactory,
226 FRHIUniformBuffer* VertexFactoryUniformBuffer,
227 FMeshDrawSingleShaderBindings& ShaderBindings,
228 FVertexInputStreamArray& VertexStreams
229 ) const;
230
235
236 // SpeedTree LOD parameter
238
239 // True if LODParameter is bound, which puts us on the slow path in GetElementShaderBindings
241};
242
245{
247public:
248 void Bind(const FShaderParameterMap& ParameterMap);
249
251 const FSceneInterface* Scene,
252 const FSceneView* View,
255 ERHIFeatureLevel::Type FeatureLevel,
256 const FVertexFactory* VertexFactory,
258 FMeshDrawSingleShaderBindings& ShaderBindings,
259 FVertexInputStreamArray& VertexStreams
260 ) const;
261
262private:
264};
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#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
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
TGlobalResource< FNullColorVertexBuffer, FRenderResource::EInitPhase::Pre > GNullColorVertexBuffer
Definition GlobalRenderResources.cpp:671
ENGINE_API void GetLocalVFUniformShaderParameters(FLocalVertexFactoryUniformShaderParameters &UniformParameters, const class FLocalVertexFactory *VertexFactory, uint32 LODLightmapDataIndex, class FColorVertexBuffer *OverrideColorVertexBuffer, int32 BaseVertexIndex, int32 PreSkinBaseVertexIndex)
ENGINE_API TUniformBufferRef< FLocalVertexFactoryUniformShaderParameters > CreateLocalVFUniformBuffer(const class FLocalVertexFactory *VertexFactory, uint32 LODLightmapDataIndex, class FColorVertexBuffer *OverrideColorVertexBuffer, int32 BaseVertexIndex, int32 PreSkinBaseVertexIndex)
#define LAYOUT_FIELD(T, Name,...)
Definition MemoryLayout.h:471
#define DECLARE_EXPORTED_TYPE_LAYOUT(T, RequiredAPI, Interface)
Definition MemoryLayout.h:559
EShaderPlatform
Definition RHIShaderPlatform.h:11
#define END_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1669
#define SHADER_PARAMETER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1720
#define BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1663
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
EVertexInputStreamType
Definition VertexFactory.h:128
#define DECLARE_VERTEX_FACTORY_TYPE_API(FactoryClass, ModuleApi)
Definition VertexFactory.h:553
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ColorVertexBuffer.h:16
Definition LocalVertexFactory.h:213
ENGINE_API void GetElementShaderBindingsBase(const class FSceneInterface *Scene, const FSceneView *View, const FMeshMaterialShader *Shader, const EVertexInputStreamType InputStreamType, ERHIFeatureLevel::Type FeatureLevel, const FVertexFactory *VertexFactory, const FMeshBatchElement &BatchElement, FRHIUniformBuffer *VertexFactoryUniformBuffer, FMeshDrawSingleShaderBindings &ShaderBindings, FVertexInputStreamArray &VertexStreams) const
Definition LocalVertexFactory.cpp:137
FLocalVertexFactoryShaderParametersBase()
Definition LocalVertexFactory.h:231
LAYOUT_FIELD(bool, bAnySpeedTreeParamIsBound)
LAYOUT_FIELD(FShaderParameter, LODParameter)
ENGINE_API void Bind(const FShaderParameterMap &ParameterMap)
Definition LocalVertexFactory.cpp:63
Definition LocalVertexFactory.h:245
void GetElementShaderBindings(const FSceneInterface *Scene, const FSceneView *View, const FMeshMaterialShader *Shader, const EVertexInputStreamType InputStreamType, ERHIFeatureLevel::Type FeatureLevel, const FVertexFactory *VertexFactory, const FMeshBatchElement &BatchElement, FMeshDrawSingleShaderBindings &ShaderBindings, FVertexInputStreamArray &VertexStreams) const
Definition LocalVertexFactory.cpp:201
void Bind(const FShaderParameterMap &ParameterMap)
Definition LocalVertexFactory.cpp:195
Definition LocalVertexFactory.h:51
const int GetLightMapCoordinateIndex() const
Definition LocalVertexFactory.h:152
const int GetNumTexcoords() const
Definition LocalVertexFactory.h:157
FRHIShaderResourceView * GetTangentsSRV() const
Definition LocalVertexFactory.h:132
virtual ENGINE_API ~FLocalVertexFactory()
const uint32 GetColorIndexMask() const
Definition LocalVertexFactory.h:147
TUniformBufferRef< FLocalVertexFactoryUniformShaderParameters > UniformBuffer
Definition LocalVertexFactory.h:189
FRHIShaderResourceView * GetPositionsSRV() const
Definition LocalVertexFactory.h:122
int32 ColorStreamIndex
Definition LocalVertexFactory.h:191
FDataType Data
Definition LocalVertexFactory.h:188
void GetColorOverrideStream(const FVertexBuffer *ColorVertexBuffer, FVertexInputStreamArray &VertexStreams) const
Definition LocalVertexFactory.h:109
FRHIUniformBuffer * GetUniformBuffer() const
Definition LocalVertexFactory.h:162
virtual FShaderResourceViewRHIRef GetTriangleSortingPositionSRV() const override
Definition LocalVertexFactory.h:117
FRHIShaderResourceView * GetColorComponentsSRV() const
Definition LocalVertexFactory.h:142
FRHIShaderResourceView * GetPreSkinPositionSRV() const
Definition LocalVertexFactory.h:127
FRHIShaderResourceView * GetTextureCoordinatesSRV() const
Definition LocalVertexFactory.h:137
const FDataType & GetData() const
Definition LocalVertexFactory.h:177
Definition MaterialShared.h:2058
Definition MeshDrawShaderBindings.h:104
Definition MeshMaterialShader.h:68
Definition RHICommandList.h:455
Definition RHICommandList.h:3819
Definition RHIResources.h:3304
Definition RHIResources.h:1232
bool IsInitialized() const
Definition RenderResource.h:114
Definition SceneInterface.h:106
Definition SceneView.h:1425
Definition ShaderCore.h:323
Definition ShaderParameters.h:56
Definition SkeletalMeshSceneProxy.h:23
TEnumAsByte< ERHIFeatureLevel::Type > FeatureLevel
Definition SkeletalMeshSceneProxy.h:194
Definition RenderResource.h:474
FBufferRHIRef VertexBufferRHI
Definition RenderResource.h:489
virtual RENDERCORE_API FString GetFriendlyName() const override
Definition RenderResource.cpp:561
Definition VertexFactory.h:172
Definition VertexFactory.h:314
Definition VertexFactory.h:661
virtual RENDERCORE_API void ReleaseRHI()
Definition VertexFactory.cpp:340
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition ShaderParameterMacros.h:136
Definition StaticMesh.h:593
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
Type
Definition RHIFeatureLevel.h:20
@ false
Definition radaudio_common.h:23
Definition LocalVertexFactory.h:60
FVertexStreamComponent PreSkinPositionComponent
Definition LocalVertexFactory.h:61
Definition LocalVertexFactory.h:196
FDebugName(const char *InDebugName)
Definition LocalVertexFactory.h:197
Definition MeshBatch.h:232
uint32 BaseVertexIndex
Definition MeshBatch.h:281
Definition ShaderCore.h:544
Definition Components.h:38
Definition MeshMaterialShader.h:44
Definition VertexFactory.h:49
Definition VertexStreamComponent.h:22