UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MaterialExpressionLayerStack.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"
13#include "MaterialExpressionLayerStack.generated.h"
14
17
29
32{
34
35 UPROPERTY()
37
38 UPROPERTY(EditAnywhere, Category = AvailableFunctions, meta = (DisallowedClasses = "/Script/Engine.MaterialFunctionMaterialLayerBlend, /Script/Engine.MaterialFunctionMaterialLayerBlendInstance"))
40
41 UPROPERTY(EditAnywhere, Category = AvailableFunctions, meta = (AllowedClasses = "/Script/Engine.MaterialFunctionMaterialLayerBlend, /Script/Engine.MaterialFunctionMaterialLayerBlendInstance"))
43
44 //~ Begin UObject Interface
45 virtual void PostLoad() override;
46 virtual void PreSave(FObjectPreSaveContext ObjectSaveContext) override;
47 //~ End UObject Interface
48
49#if WITH_EDITOR
50 //~ Begin UMaterialExpression Interface
51 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
52 virtual void GetCaption(TArray<FString>& OutCaptions) const override;
53 virtual void GetExpressionToolTip(TArray<FString>& OutToolTip) override;
54 virtual FName GetInputName(int32 InputIndex) const override;
55 virtual FExpressionInput* GetInput(int32 InputIndex) override;
57 virtual EMaterialValueType GetInputValueType(int32 InputIndex) override;
58 //~ End UMaterialExpression Interface
59
60 //~ Begin UMaterialExpressionMaterialAttributeLayers Interface
61 virtual bool ValidateLayerConfiguration(FMaterialCompiler* Compiler, bool bReportErrors) override;
63 //~ End UMaterialExpressionMaterialAttributeLayers Interface
64
65 //This struct is to circumvent having to extend the below lambda in future if we want to validate against additional node types.
67 {
70 bool bContainsStatics = false;
71 };
72
75 static bool ValidateFunctionForLayerUsage(class FMaterialCompiler* Compiler, UMaterialFunctionInterface* CurrentFunction, bool bCheckStatics = false);
76 static bool ValidateFunctionForBlendUsage(class FMaterialCompiler* Compiler, UMaterialFunctionInterface* CurrentFunction, bool bCheckStatics = false);
77
79 void ResolveLayerInputs();
80 void CacheLayerInputs();
81#endif
82 inline TArray<FSoftObjectPath> GetAvailableLayerPaths() { return GetPathsFromAvailableFunctions(AvailableLayers); }
83 inline TArray<FSoftObjectPath> GetAvailableBlendPaths() { return GetPathsFromAvailableFunctions(AvailableBlends); }
84
85private:
87 bool bAreAvailableLayersValid = false;
88
89 static TArray<FSoftObjectPath> GetPathsFromAvailableFunctions(TSet<TObjectPtr<UMaterialFunctionInterface>>& InFunctions);
90};
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
EFunctionInputType
Definition MaterialExpressionFunctionInput.h:19
EMaterialValueType
Definition MaterialValueType.h:15
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
Definition MaterialCompiler.h:109
Definition NameTypes.h:617
Definition ObjectSaveContext.h:244
Definition ArrayView.h:139
Definition Array.h:670
Definition EnumAsByte.h:22
Definition SharedPointer.h:692
Definition MaterialExpressionLayerStack.h:32
Definition MaterialExpressionMaterialAttributeLayers.h:27
Definition MaterialFunctionInterface.h:59
Definition RobinHoodHashTable.h:18
Definition MaterialExpressionIO.h:23
Definition MaterialExpressionLayerStack.h:20
Definition UnrealType.h:6865
Definition ObjectPtr.h:488