UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MaterialRenderProxy.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"
6#include "Math/Color.h"
7#include "Math/Vector2D.h"
8#include "RenderResource.h"
10#include "Async/Mutex.h"
11#include "Tasks/Task.h"
13
14enum class EMaterialParameterType : uint8;
15
16class FMaterial;
29class UNeuralProfile;
30class UTexture;
33
36
39
40namespace UE::Shader
41{
42 struct FValue;
43}
44
66
68{
70 {
71#if WITH_EDITOR
72 return Elements[Index];
73#else
74 return Elements;
75#endif
76 }
77private:
78#if WITH_EDITOR
80#else
82#endif
83};
84
97
102{
103public:
104
107
110
113
116
123
128
131
139
144
147
151
152 // These functions should only be called by the rendering thread.
153
160
166
167 virtual UMaterialInterface* GetMaterialInterface() const { return NULL; }
168
170 ENGINE_API bool GetScalarValue(const FHashedMaterialParameterInfo& ParameterInfo, float* OutValue, const FMaterialRenderContext& Context) const;
178 virtual bool GetUserSceneTextureOverride(FName& InOutValue) const { return false; }
181 ENGINE_API virtual int32 GetBlendablePriority(const FMaterial* Base) const;
182
183
184 bool IsDeleted() const
185 {
186 return DeletedFlag != 0;
187 }
188
190 {
191 MarkedForGarbageCollection = -1;
192 }
193
195 {
196 return MarkedForGarbageCollection != 0;
197 }
198
200 {
201 bMarkedTransient = 1;
202 }
203
204 // FRenderResource interface.
205 ENGINE_API virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
206 ENGINE_API virtual void ReleaseRHI() override;
207 ENGINE_API virtual void ReleaseResource() override;
208
209#if WITH_EDITOR
211 {
212 check(!FPlatformProperties::RequiresCookedData());
214 }
215
217 {
219 }
220#endif
221
222 // Subsurface profile
223 // When Substrate is enabled, this is ONLY used as an override for Subsurface Profile on material instance (override all Subsurface Profiles at once for now)
224 void SetSubsurfaceProfileRT(const USubsurfaceProfile* Ptr) { SubsurfaceProfileRT = Ptr; }
225 const USubsurfaceProfile* GetSubsurfaceProfileRT() const { return SubsurfaceProfileRT; }
226
227 // Subsurface profiles
228 void ClearSubsurfaceProfileRT() { SubsurfaceProfilesRT.Empty(); }
229 void AddSubsurfaceProfileRT(const USubsurfaceProfile* Ptr) { SubsurfaceProfilesRT.Add(Ptr); }
230 const USubsurfaceProfile* GetSubsurfaceProfileRT(uint32 Index) const { check(Index<uint32(SubsurfaceProfilesRT.Num())); return SubsurfaceProfilesRT[Index]; }
231 const uint32 NumSubsurfaceProfileRT() const { return SubsurfaceProfilesRT.Num(); }
232
233 // Specular profiles
234 void AddSpecularProfileRT(const USpecularProfile* Ptr) { SpecularProfilesRT.Add(Ptr); }
235 const USpecularProfile* GetSpecularProfileRT(uint32 Index) const { check(Index<uint32(SpecularProfilesRT.Num())); return SpecularProfilesRT[Index]; }
236 const uint32 NumSpecularProfileRT() const { return SpecularProfilesRT.Num(); }
237 // Specular profiles override
238 void SetSpecularProfileOverrideRT(const USpecularProfile* Ptr) { SpecularProfileOverrideRT = Ptr; }
239 const USpecularProfile* GetSpecularProfileOverrideRT() const { return SpecularProfileOverrideRT; }
240
241 // Neural profiles
242 void SetNeuralProfileRT(const UNeuralProfile* Ptr) { NeuralProfileRT = Ptr; }
243 const UNeuralProfile* GetNeuralProfileRT() const { return NeuralProfileRT; }
244
247
249
250 int32 GetExpressionCacheSerialNumber() const { return UniformExpressionCacheSerialNumber; }
251
252 const FString& GetMaterialName() const { return MaterialName; }
253
254protected:
256
257private:
258 ENGINE_API IAllocatedVirtualTexture* GetPreallocatedVTStack(const FMaterialRenderContext& Context, const FUniformExpressionSet& UniformExpressionSet, const FMaterialVirtualTextureStack& VTStack) const;
259 ENGINE_API IAllocatedVirtualTexture* AllocateVTStack(FRHICommandListBase& RHICmdList, const FMaterialRenderContext& Context, const FUniformExpressionSet& UniformExpressionSet, const FMaterialVirtualTextureStack& VTStack) const;
260
261 virtual void StartCacheUniformExpressions() const {}
262 virtual void FinishCacheUniformExpressions() const {}
263
265 const USubsurfaceProfile* SubsurfaceProfileRT; // Overrides all SubsurfaceProfilesRT when set, used when set from material instance to respect the legacy workflow
266 TArray<const USubsurfaceProfile*> SubsurfaceProfilesRT;
267 TArray<const USpecularProfile*> SpecularProfilesRT;
268 const USpecularProfile* SpecularProfileOverrideRT = nullptr;
269 const UNeuralProfile* NeuralProfileRT;
270 FString MaterialName;
271
273 mutable int32 UniformExpressionCacheSerialNumber = 0;
274
276 mutable uint8 MarkedForGarbageCollection : 1;
277 mutable uint8 DeletedFlag : 1;
278 mutable uint8 ReleaseResourceFlag : 1;
280 uint8 bMarkedTransient : 1;
282 mutable uint8 bHasVirtualTextureCallbacks : 1;
283 mutable uint8 bHasMaterialCacheCallbacks : 1;
284
286 mutable UE::FMutex Mutex;
287
288#if WITH_EDITOR
294
299#endif
300
301 static ENGINE_API TSet<FMaterialRenderProxy*> DeferredUniformExpressionCacheRequests;
302 static ENGINE_API UE::FMutex DeferredUniformExpressionCacheRequestsMutex;
303};
304
323
340
358
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
EBlendableLocation
Definition BlendableInterface.h:15
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
EMaterialParameterType
Definition MaterialParameters.h:187
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MaterialRenderProxy.h:309
FName ColorParamName
Definition MaterialRenderProxy.h:313
virtual ENGINE_API bool GetParameterValue(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, FMaterialParameterValue &OutValue, const FMaterialRenderContext &Context) const override
Definition MaterialRenderProxy.cpp:961
const FLinearColor Color
Definition MaterialRenderProxy.h:312
const FMaterialRenderProxy *const Parent
Definition MaterialRenderProxy.h:311
virtual ENGINE_API const FMaterialRenderProxy * GetFallback(ERHIFeatureLevel::Type InFeatureLevel) const override
Definition MaterialRenderProxy.cpp:956
virtual ENGINE_API const FMaterial * GetMaterialNoFallback(ERHIFeatureLevel::Type InFeatureLevel) const override
Definition MaterialRenderProxy.cpp:951
Definition MaterialRenderProxy.h:328
virtual ENGINE_API bool GetParameterValue(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, FMaterialParameterValue &OutValue, const FMaterialRenderContext &Context) const override
Definition MaterialRenderProxy.cpp:985
FName TextureParamName
Definition MaterialRenderProxy.h:331
float UVChannel
Definition MaterialRenderProxy.h:332
const UTexture * Texture
Definition MaterialRenderProxy.h:330
FName UVChannelParamName
Definition MaterialRenderProxy.h:333
Definition MaterialRenderProxy.h:363
const FVector2D LightmapResolution
Definition MaterialRenderProxy.h:365
virtual ENGINE_API bool GetParameterValue(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, FMaterialParameterValue &OutValue, const FMaterialRenderContext &Context) const override
Definition MaterialRenderProxy.cpp:1053
Definition MaterialRenderProxy.h:102
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList) override
Definition MaterialRenderProxy.cpp:740
const UNeuralProfile * GetNeuralProfileRT() const
Definition MaterialRenderProxy.h:243
const USpecularProfile * GetSpecularProfileOverrideRT() const
Definition MaterialRenderProxy.h:239
ENGINE_API void CacheUniformExpressions(FRHICommandListBase &RHICmdList, bool bRecreateUniformBuffer)
Definition MaterialRenderProxy.cpp:590
ENGINE_API void InvalidateUniformExpressionCache(bool bRecreateUniformBuffer)
Definition MaterialRenderProxy.cpp:634
void SetNeuralProfileRT(const UNeuralProfile *Ptr)
Definition MaterialRenderProxy.h:242
bool IsDeleted() const
Definition MaterialRenderProxy.h:184
bool IsMarkedForGarbageCollection() const
Definition MaterialRenderProxy.h:194
FImmutableSamplerState ImmutableSamplerState
Definition MaterialRenderProxy.h:109
virtual ENGINE_API void EvaluateParameterCollections(FRHICommandListBase &RHICmdList, FUniformExpressionCache &OutUniformExpressionCache, const FMaterialRenderContext &Context, FUniformExpressionCacheAsyncUpdater *Updater) const
Definition MaterialRenderProxy.cpp:581
void SetSpecularProfileOverrideRT(const USpecularProfile *Ptr)
Definition MaterialRenderProxy.h:238
ENGINE_API bool GetTextureValue(const FHashedMaterialParameterInfo &ParameterInfo, const UTexture **OutValue, const FMaterialRenderContext &Context) const
Definition MaterialRenderProxy.cpp:218
const USubsurfaceProfile * GetSubsurfaceProfileRT(uint32 Index) const
Definition MaterialRenderProxy.h:230
virtual bool GetUserSceneTextureOverride(FName &InOutValue) const
Definition MaterialRenderProxy.h:178
virtual const FMaterial * GetMaterialNoFallback(ERHIFeatureLevel::Type InFeatureLevel) const =0
const uint32 NumSubsurfaceProfileRT() const
Definition MaterialRenderProxy.h:231
virtual UMaterialInterface * GetMaterialInterface() const
Definition MaterialRenderProxy.h:167
ENGINE_API bool GetVectorValue(const FHashedMaterialParameterInfo &ParameterInfo, FLinearColor *OutValue, const FMaterialRenderContext &Context) const
Definition MaterialRenderProxy.cpp:196
void ClearSubsurfaceProfileRT()
Definition MaterialRenderProxy.h:228
virtual ENGINE_API void ReleaseResource() override
Definition MaterialRenderProxy.cpp:784
virtual bool GetParameterValue(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, FMaterialParameterValue &OutValue, const FMaterialRenderContext &Context) const =0
ENGINE_API void CacheUniformExpressions_GameThread(bool bRecreateUniformBuffer)
Definition MaterialRenderProxy.cpp:619
ENGINE_API bool GetTextureCollectionValue(const FHashedMaterialParameterInfo &ParameterInfo, const UTextureCollection **OutValue, const FMaterialRenderContext &Context) const
Definition MaterialRenderProxy.cpp:251
ENGINE_API bool GetScalarValue(const FHashedMaterialParameterInfo &ParameterInfo, float *OutValue, const FMaterialRenderContext &Context) const
Definition MaterialRenderProxy.cpp:207
const FString & GetMaterialName() const
Definition MaterialRenderProxy.h:252
static ENGINE_API bool HasDeferredUniformExpressionCacheRequests()
Definition MaterialRenderProxy.cpp:926
void AddSpecularProfileRT(const USpecularProfile *Ptr)
Definition MaterialRenderProxy.h:234
ENGINE_API void CancelCacheUniformExpressions()
Definition MaterialRenderProxy.cpp:752
FUniformExpressionCacheContainer UniformExpressionCache
Definition MaterialRenderProxy.h:106
virtual ENGINE_API ~FMaterialRenderProxy()
Definition MaterialRenderProxy.cpp:711
virtual ENGINE_API int32 GetBlendablePriority(const FMaterial *Base) const
Definition MaterialRenderProxy.cpp:308
ENGINE_API const FMaterial & GetMaterialWithFallback(ERHIFeatureLevel::Type InFeatureLevel, const FMaterialRenderProxy *&OutFallbackMaterialRenderProxy) const
Definition MaterialRenderProxy.cpp:803
ENGINE_API void UpdateUniformExpressionCacheIfNeeded(ERHIFeatureLevel::Type InFeatureLevel) const
Definition MaterialRenderProxy.cpp:695
int32 GetExpressionCacheSerialNumber() const
Definition MaterialRenderProxy.h:250
virtual ENGINE_API EBlendableLocation GetBlendableLocation(const FMaterial *Base) const
Definition MaterialRenderProxy.cpp:302
const USubsurfaceProfile * GetSubsurfaceProfileRT() const
Definition MaterialRenderProxy.h:225
ENGINE_API const FMaterial & GetIncompleteMaterialWithFallback(ERHIFeatureLevel::Type InFeatureLevel) const
Definition MaterialRenderProxy.cpp:828
virtual ENGINE_API void ReleaseRHI() override
Definition MaterialRenderProxy.cpp:759
const USpecularProfile * GetSpecularProfileRT(uint32 Index) const
Definition MaterialRenderProxy.h:235
void AddSubsurfaceProfileRT(const USubsurfaceProfile *Ptr)
Definition MaterialRenderProxy.h:229
void MarkForGarbageCollection()
Definition MaterialRenderProxy.h:189
void MarkTransient()
Definition MaterialRenderProxy.h:199
ENGINE_API bool GetParameterCollectionValue(const FHashedMaterialParameterInfo &ParameterInfo, const UMaterialParameterCollection **OutValue, const FMaterialRenderContext &Context) const
Definition MaterialRenderProxy.cpp:262
ENGINE_API bool GetParameterShaderValue(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, UE::Shader::FValue &OutValue, const FMaterialRenderContext &Context) const
Definition MaterialRenderProxy.cpp:273
const uint32 NumSpecularProfileRT() const
Definition MaterialRenderProxy.h:236
void SetSubsurfaceProfileRT(const USubsurfaceProfile *Ptr)
Definition MaterialRenderProxy.h:224
virtual const FMaterialRenderProxy * GetFallback(ERHIFeatureLevel::Type InFeatureLevel) const =0
ENGINE_API void EvaluateUniformExpressions(FRHICommandListBase &RHICmdList, FUniformExpressionCache &OutUniformExpressionCache, const FMaterialRenderContext &Context, FUniformExpressionCacheAsyncUpdater *Updater=nullptr) const
Definition MaterialRenderProxy.cpp:438
static ENGINE_API void UpdateDeferredCachedUniformExpressions()
Definition MaterialRenderProxy.cpp:921
ENGINE_API FName GetUserSceneTextureOutput(const FMaterial *Base) const
Definition MaterialRenderProxy.cpp:284
Definition MaterialShared.h:1518
Definition MaterialShared.h:383
Definition MaterialShared.h:2058
Definition NameTypes.h:617
Definition UnrealTemplate.h:321
Definition MaterialRenderProxy.h:345
const FLinearColor SelectionColor
Definition MaterialRenderProxy.h:348
virtual ENGINE_API const FMaterialRenderProxy * GetFallback(ERHIFeatureLevel::Type InFeatureLevel) const override
Definition MaterialRenderProxy.cpp:1023
virtual ENGINE_API bool GetParameterValue(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, FMaterialParameterValue &OutValue, const FMaterialRenderContext &Context) const override
Definition MaterialRenderProxy.cpp:1028
const FMaterialRenderProxy *const Parent
Definition MaterialRenderProxy.h:347
virtual ENGINE_API const FMaterial * GetMaterialNoFallback(ERHIFeatureLevel::Type InFeatureLevel) const override
Definition MaterialRenderProxy.cpp:1018
Definition RHICommandList.h:455
Definition RHICommandList.h:2735
Definition RenderResource.h:37
Definition MaterialRenderProxy.h:89
ENGINE_API ~FUniformExpressionCacheAsyncUpdateScope()
Definition MaterialRenderProxy.cpp:97
static ENGINE_API void WaitForTask()
Definition MaterialRenderProxy.cpp:106
ENGINE_API FUniformExpressionCacheAsyncUpdateScope()
Definition MaterialRenderProxy.cpp:88
Definition MaterialRenderProxy.cpp:112
Definition MaterialShared.h:666
Definition VirtualTexturing.h:374
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition Mutex.h:18
Definition MaterialInterface.h:296
Definition MaterialParameterCollection.h:79
Definition NeuralProfile.h:141
Definition RuntimeVirtualTexture.h:18
Definition SparseVolumeTexture.h:309
Definition SpecularProfile.h:74
Definition SubsurfaceProfile.h:170
Definition TextureCollection.h:47
Definition Texture.h:1219
Type
Definition RHIFeatureLevel.h:20
@ Num
Definition RHIFeatureLevel.h:54
Definition SparseVolumeTexture.h:19
U16 Index
Definition radfft.cpp:71
Definition RHIImmutableSamplerState.h:17
Definition Color.h:48
Definition MaterialParameters.h:341
Definition MaterialShared.h:349
Definition MaterialParameters.h:96
Definition MaterialRenderProxy.h:68
FUniformExpressionCache & operator[](int32 Index)
Definition MaterialRenderProxy.h:69
Definition MaterialRenderProxy.h:49
const FMaterialShaderMap * CachedUniformExpressionShaderMap
Definition MaterialRenderProxy.h:59
TArray< FGuid > ParameterCollections
Definition MaterialRenderProxy.h:57
ENGINE_API ~FUniformExpressionCache()
Definition MaterialRenderProxy.cpp:40
TArray< IAllocatedVirtualTexture * > OwnedAllocatedVTs
Definition MaterialRenderProxy.h:55
FUniformBufferRHIRef UniformBuffer
Definition MaterialRenderProxy.h:51
void ResetAllocatedVTs()
Definition MaterialRenderProxy.cpp:185
TArray< IAllocatedVirtualTexture * > AllocatedVTs
Definition MaterialRenderProxy.h:53
Definition ShaderTypes.h:368