UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MaterialFunctionInterface.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"
8#include "UObject/Object.h"
9#include "Misc/Guid.h"
10#include "Templates/Casts.h"
12#include "StaticParameterSet.h"
13
14#if WITH_EDITOR
16#endif
17
18#include "MaterialFunctionInterface.generated.h"
19
20class UMaterial;
22class UTexture;
29
31UENUM()
38
39#define DEFAULT_SUBSTRATE_MATERIALLAYERBLEND_PATH TEXT("/Engine/EngineMaterials/Blends/MLB_Horizontal")
40
42
45{
47public:
48
49 //~ Begin UObject Interface.
50 ENGINE_API virtual void Serialize(FArchive& Ar) override;
51 //~ End UObject Interface.
52};
53
57UCLASS(BlueprintType, abstract, hidecategories=object, MinimalAPI)
59{
61
62#if WITH_EDITORONLY_DATA
63protected:
65
66 UPROPERTY()
68
69 ENGINE_API virtual const UClass* GetEditorOnlyDataClass() const;
70
71public:
74#endif // WITH_EDITORONLY_DATA
75
76public:
77
78 //~ Begin UObject Interface.
79 virtual void PostInitProperties() override;
80 virtual void PostDuplicate(bool bDuplicateForPIE) override;
81 virtual void PostLoad() override;
82#if WITH_EDITORONLY_DATA
84#endif
85
86 virtual void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const override;
87
88#if WITH_EDITOR
89 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
90#endif
91 virtual bool Rename(const TCHAR* NewName = nullptr, UObject* NewOuter = nullptr, ERenameFlags Flags = REN_None) override;
92 //~ End UObject Interface.
93
95 UPROPERTY()
96 FGuid StateId;
97
100 UPROPERTY(AssetRegistrySearchable)
102
103public:
104 virtual EMaterialFunctionUsage GetMaterialFunctionUsage()
105 PURE_VIRTUAL(UMaterialFunctionInterface::GetMaterialFunctionUsage,return EMaterialFunctionUsage::Default;);
106
107#if WITH_EDITOR
108 virtual void UpdateFromFunctionResource()
110
113
115#endif
116
119
120#if WITH_EDITOR
121 virtual int32 Compile(class FMaterialCompiler* Compiler, const struct FFunctionExpressionOutput& Output)
122 PURE_VIRTUAL(UMaterialFunctionInterface::Compile,return INDEX_NONE;);
123
125 PURE_VIRTUAL(UMaterialFunctionInterface::LinkIntoCaller,);
126
127 virtual void UnlinkFromCaller()
129#endif
130
131#if WITH_EDITORONLY_DATA
133 virtual bool IsDependent(UMaterialFunctionInterface* OtherFunction)
134 PURE_VIRTUAL(UMaterialFunctionInterface::IsDependent,return false;);
135
143 virtual bool IterateDependentFunctions(TFunctionRef<bool(UMaterialFunctionInterface*)> Predicate) const
144 PURE_VIRTUAL(UMaterialFunctionInterface::IterateDependentFunctions,return false;);
145
148 PURE_VIRTUAL(UMaterialFunctionInterface::GetDependentFunctions,);
149
151 virtual FString GetUserExposedCaption() const { return TEXT(""); }
152#endif // WITH_EDITORONLY_DATA
153
154#if WITH_EDITOR
157
160
162 virtual bool HasFlippedCoordinates() const
164#endif
165
166#if WITH_EDITORONLY_DATA
167 UPROPERTY(AssetRegistrySearchable)
169
170 UPROPERTY(AssetRegistrySearchable)
172
174 UPROPERTY(VisibleAnywhere, Instanced, Category = Thumbnail)
176#endif
177
179 PURE_VIRTUAL(UMaterialFunction::GetBaseFunction,return nullptr;);
180
181 virtual const UMaterialFunction* GetBaseFunction(FMFRecursionGuard RecursionGuard = FMFRecursionGuard()) const
182 PURE_VIRTUAL(UMaterialFunction::GetBaseFunction,return nullptr;);
183
185 ENGINE_API UMaterialFunctionInterface* GetBaseFunctionInterface();
186 ENGINE_API const UMaterialFunctionInterface* GetBaseFunctionInterface() const;
187
188#if WITH_EDITORONLY_DATA
190#endif // WITH_EDITORONLY_DATA
191
192#if WITH_EDITOR
193 ENGINE_API const FString& GetDescription() const;
194 ENGINE_API bool GetReentrantFlag() const;
195 ENGINE_API void SetReentrantFlag(bool bIsReentrant);
196#endif // WITH_EDITOR
197
198public:
199
200#if WITH_EDITOR
202 template<typename ExpressionType>
204 {
205 Parameter = nullptr;
206
207 if (UMaterialFunctionInterface* ParameterFunction = GetBaseFunctionInterface())
208 {
209 const UClass* TargetClass = ExpressionType::StaticClass();
210
212 [&ParameterInfo, &Parameter, &OwningFunction, TargetClass](UMaterialFunctionInterface* Function) -> bool
213 {
215 {
217 {
218 if (ExpressionParameter->ParameterName == ParameterInfo.Name)
219 {
220 Parameter = ExpressionParameter;
221
222 if (OwningFunction)
223 {
224 (*OwningFunction) = Function;
225 }
226
227 return false; // found, stop iterating
228 }
229 }
230 }
231
232 return true; // not found, continue iterating
233 };
234
235 if (!ParameterFunction->IterateDependentFunctions(GetExpressionParameterByNamePredicate))
236 {
237 return true;
238 }
240 }
241
242 return false;
243 }
244
246 template <typename ParameterType, typename ExpressionType>
247 bool UpdateParameterSet(ParameterType& Parameter)
248 {
249 bool bChanged = false;
250
251 if (UMaterialFunctionInterface* ParameterFunction = GetBaseFunctionInterface())
252 {
254 ParameterFunction->GetDependentFunctions(Functions);
255 Functions.AddUnique(ParameterFunction);
256
257 for (UMaterialFunctionInterface* Function : Functions)
258 {
260 {
262 {
263 if (ParameterExpression->ParameterName == Parameter.ParameterInfo.Name)
264 {
265 Parameter.ExpressionGUID = ParameterExpression->ExpressionGUID;
266 bChanged = true;
267 break;
268 }
269 }
270 }
271 }
272 }
273
274 return bChanged;
275 }
276#endif // WITH_EDITOR
277
278#if WITH_EDITORONLY_DATA
280 template<typename ExpressionType>
282 {
283 if (UMaterialFunctionInterface* ParameterFunction = GetBaseFunctionInterface())
284 {
286 ParameterFunction->GetDependentFunctions(Functions);
287 Functions.AddUnique(ParameterFunction);
288
289 for (UMaterialFunctionInterface* Function : Functions)
290 {
292 {
294 {
295 return true;
296 }
297 }
298 }
299 }
300
301 return false;
302 }
303
305 template<typename ExpressionType>
306 void GetAllExpressionsOfType(TArray<ExpressionType*>& OutExpressions, const bool bRecursive = true)
307 {
308 if (UMaterialFunctionInterface* ParameterFunction = GetBaseFunctionInterface())
309 {
311 if (bRecursive)
312 {
313 ParameterFunction->GetDependentFunctions(Functions);
314 }
315 Functions.AddUnique(ParameterFunction);
316
317 for (UMaterialFunctionInterface* Function : Functions)
318 {
320 {
322 {
324 }
325 }
326 }
327 }
328 }
329#endif // WITH_EDITORONLY_DATA
330
331#if WITH_EDITOR
332 virtual bool GetParameterOverrideValue(EMaterialParameterType Type, const FName& ParameterName, FMaterialParameterMetadata& OutValue, FMFRecursionGuard RecursionGuard = FMFRecursionGuard()) const;
333
344
345 virtual bool IsUsingNewHLSLGenerator() const { return false; }
346#endif // WITH_EDITOR
347};
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define PURE_VIRTUAL(func,...)
Definition CoreMiscDefines.h:103
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TMaterialRecursionGuard< class UMaterialFunctionInterface > FMFRecursionGuard
Definition MaterialFunctionInterface.h:41
EMaterialFunctionUsage
Definition MaterialFunctionInterface.h:33
EMaterialParameterType
Definition MaterialParameters.h:187
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
uint32 ERenameFlags
Definition ObjectMacros.h:2302
#define REN_None
Definition ObjectMacros.h:2305
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
Definition AssetRegistryTagsContext.h:98
Definition MaterialCompiler.h:109
Definition MaterialShared.h:3326
Definition NameTypes.h:617
Definition Array.h:670
UE_FORCEINLINE_HINT SizeType AddUnique(ElementType &&Item)
Definition Array.h:2993
Definition AssetRegistryState.h:50
Definition Class.h:3793
Definition Font.h:111
Definition MaterialExpression.h:150
Definition MaterialFunctionInterface.h:45
Definition MaterialFunctionInterface.h:59
virtual bool ValidateFunctionUsage(class FMaterialCompiler *Compiler, const FFunctionExpressionOutput &Output) PURE_VIRTUAL(UMaterialFunctionInterface
Definition MaterialFunctionInterface.h:117
virtual UMaterialFunction * GetBaseFunction(FMFRecursionGuard RecursionGuard=FMFRecursionGuard()) PURE_VIRTUAL(UMaterialFunction
Definition MaterialFunctionInterface.h:178
Definition MaterialFunction.h:40
Definition MaterialInterface.h:296
Definition MaterialParameterCollection.h:79
Definition Material.h:432
Definition Object.h:95
virtual COREUOBJECT_API bool Rename(const TCHAR *NewName=nullptr, UObject *NewOuter=nullptr, ERenameFlags Flags=REN_None)
Definition Obj.cpp:245
virtual void PostDuplicate(bool bDuplicateForPIE)
Definition Object.h:538
virtual COREUOBJECT_API void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const
Definition Obj.cpp:2423
virtual COREUOBJECT_API void PostInitProperties()
Definition UObjectGlobals.cpp:3961
Definition RuntimeVirtualTexture.h:18
Definition SparseVolumeTexture.h:309
Definition TextureCollection.h:47
Definition Texture.h:1219
@ false
Definition radaudio_common.h:23
Definition MaterialExpressionMaterialFunctionCall.h:24
Definition MaterialExpressionMaterialFunctionCall.h:53
Definition Guid.h:109
Definition Color.h:48
Definition MaterialParameters.h:446
Definition MaterialParameters.h:96
Definition UnrealType.h:6865
Definition MaterialRecursionGuard.h:11
Definition ObjectPtr.h:488