47 if (
Material->GetReentrantFlag(bIsInGameThread) ==
true)
52 Material->SetReentrantFlag(
true, bIsInGameThread);
58 Material->SetReentrantFlag(
false, bIsInGameThread);
93 check((
InInfo.Index >= std::numeric_limits<int16>::min()) && (
InInfo.Index <= std::numeric_limits<int16>::max()));
114template <
typename ValueType>
129 template<
typename ParameterInfo>
166 for (
int32 NextItem =
Array[ItemIndex].
Info.HashNext; NextItem; NextItem =
Array[NextItem].Info.HashNext)
168 ItemIndex = NextItem;
244 VectorParameterArray.
Empty();
245 DoubleVectorParameterArray.Empty();
246 ScalarParameterArray.
Empty();
247 TextureParameterArray.
Empty();
248 TextureCollectionParameterArray.
Empty();
249 RuntimeVirtualTextureParameterArray.
Empty();
250 SparseVolumeTextureParameterArray.
Empty();
251 ParameterCollectionParameterArray.
Empty();
252 UserSceneTextureOverrides.
Empty();
258 template <
typename ValueType>
296 template <
typename ValueType>
319 static bool IsValidParameterValue(
float) {
return true; }
320 static bool IsValidParameterValue(
const FLinearColor&) {
return true; }
321 static bool IsValidParameterValue(
const FVector4d&) {
return true; }
327 static bool IsValidParameterValue(
FName Value) {
return true; }
329 virtual void StartCacheUniformExpressions()
const override;
330 virtual void FinishCacheUniformExpressions()
const override;
333 #define HASHED_MATERIAL_PARAMETER_MAP_VALIDATE 0
335 template <
typename ValueType>
340#if HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
344 if (ValueArray.
Array[
Index].Info == ParameterInfo)
365 if (ValueArray.
Array[ItemIndex].Info == ParameterInfo)
367#if HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
375 ItemIndex = (
int32)ValueArray.
Array[ItemIndex].Info.HashNext;
386#if HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
392 #undef HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
464template <
typename ParameterType>
467 for (
int32 ParameterIndex = 0; ParameterIndex < Parameters.
Num(); ParameterIndex++)
469 ParameterType* Parameter = &Parameters[ParameterIndex];
470 if (Parameter->ParameterInfo == ParameterInfo)
478template <
typename ParameterType>
481 for (
int32 ParameterIndex = 0; ParameterIndex < Parameters.
Num(); ParameterIndex++)
483 const ParameterType* Parameter = &Parameters[ParameterIndex];
484 if (Parameter->ParameterInfo == ParameterInfo)
492template <
typename ParameterType>
495 for (
int32 ParameterIndex = 0; ParameterIndex < Parameters.
Num(); ++ParameterIndex)
497 const ParameterType* Parameter = &Parameters[ParameterIndex];
498 if (Parameter->ParameterInfo == ParameterInfo)
500 return ParameterIndex;
508template <
typename ParameterType>
516 return &Parameters[
Index];
519template <
typename ParameterType>
527 return &Parameters[
Index];
530template <
typename ParameterType>
533 for (
int32 ParameterIndex = 0; ParameterIndex < Parameters.
Num(); ParameterIndex++)
535 const ParameterType* Parameter = &Parameters[ParameterIndex];
536 if (Parameter->IsOverride() && Parameter->IsValid() && Parameter->ParameterInfo == ParameterInfo)
545template <
typename ParameterType,
typename Overr
idenParametersType>
554 for (
int32 ParameterIndex = 0; ParameterIndex < Parameters.
Num(); ParameterIndex++)
556 const ParameterType* Parameter = &Parameters[ParameterIndex];
557 if (Parameter->IsOverride())
560 if (Parameter->ParameterInfo.RemapLayerIndex(
LayerIndexRemap, ParameterInfo))
569 Parameter->GetValue(*Result);
570#if WITH_EDITORONLY_DATA
573 Result->bOverride =
true;
583template<
typename TArrayType>
590 for (
int32 i = 0; i < ParentLayerIndexRemap.
Num(); ++i)
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
EBlendableLocation
Definition BlendableInterface.h:15
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
#define LLM_SCOPE(...)
Definition LowLevelMemTracker.h:1095
void RemapLayersForParent(TArrayType &LayerIndexRemap, int32 NumParentLayers, TArrayView< const int32 > ParentLayerIndexRemap)
Definition MaterialInstanceSupport.h:584
ParameterType * GameThread_FindParameterByIndex(TArray< ParameterType > &Parameters, int32 Index)
Definition MaterialInstanceSupport.h:509
bool GameThread_GetParameterValue(const TArray< ParameterType > &Parameters, const FHashedMaterialParameterInfo &ParameterInfo, FMaterialParameterMetadata &OutResult)
Definition MaterialInstanceSupport.h:531
void RecacheMaterialInstanceUniformExpressions(const UMaterialInterface *ParentMaterial, bool bRecreateUniformBuffer)
void CacheMaterialInstanceUniformExpressions(const UMaterialInstance *MaterialInstance, bool bRecreateUniformBuffer=false)
Definition MaterialInstance.cpp:117
void GameThread_ApplyParameterOverrides(const TArray< ParameterType > &Parameters, TArrayView< const int32 > LayerIndexRemap, bool bSetOverride, OverridenParametersType &OverridenParameters, TMap< FMaterialParameterInfo, FMaterialParameterMetadata > &OutParameters, bool bAddIfNotFound=false)
Definition MaterialInstanceSupport.h:546
ParameterType * GameThread_FindParameterByName(TArray< ParameterType > &Parameters, const FHashedMaterialParameterInfo &ParameterInfo)
Definition MaterialInstanceSupport.h:465
int32 GameThread_FindParameterIndexByName(const TArray< ParameterType > &Parameters, const FHashedMaterialParameterInfo &ParameterInfo)
Definition MaterialInstanceSupport.h:493
EMaterialParameterType
Definition MaterialParameters.h:187
CORE_API bool IsInParallelGameThread()
Definition ThreadingBase.cpp:207
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
CORE_API bool IsInRenderingThread()
Definition ThreadingBase.cpp:273
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition MaterialInstanceSupport.h:35
FMICReentranceGuard(const UMaterialInstance *InMaterial)
Definition MaterialInstanceSupport.h:38
Definition MaterialInstanceSupport.h:208
virtual const FMaterialRenderProxy * GetFallback(ERHIFeatureLevel::Type InFeatureLevel) const override
Definition MaterialInstance.cpp:231
virtual EBlendableLocation GetBlendableLocation(const FMaterial *Base) const override
Definition MaterialInstance.cpp:409
virtual bool GetUserSceneTextureOverride(FName &InOutValue) const override
Definition MaterialInstance.cpp:383
void GameThread_Destroy()
Definition MaterialInstance.cpp:176
virtual UMaterialInterface * GetMaterialInterface() const override
Definition MaterialInstance.cpp:286
void GameThread_UpdateCachedData(const FMaterialInstanceCachedData &CachedData)
Definition MaterialInstance.cpp:491
void RenderThread_UpdateParameter(const FHashedMaterialParameterInfo &ParameterInfo, const ValueType &Value)
Definition MaterialInstanceSupport.h:259
virtual int32 GetBlendablePriority(const FMaterial *Base) const override
Definition MaterialInstance.cpp:435
virtual bool GetParameterValue(EMaterialParameterType Type, const FHashedMaterialParameterInfo &ParameterInfo, FMaterialParameterValue &OutValue, const FMaterialRenderContext &Context) const override
Definition MaterialInstance.cpp:291
void GameThread_SetParent(UMaterialInterface *ParentMaterialInterface)
Definition MaterialInstance.cpp:462
void RenderThread_ClearParameters()
Definition MaterialInstanceSupport.h:241
virtual const FMaterial * GetMaterialNoFallback(ERHIFeatureLevel::Type FeatureLevel) const override
Definition MaterialInstance.cpp:259
bool RenderThread_GetParameterValue(const FHashedMaterialParameterInfo &ParameterInfo, FMaterialParameterValue &OutValue) const
Definition MaterialInstanceSupport.h:297
void InitMIParameters(struct FMaterialInstanceParameterSet &ParameterSet)
Definition MaterialInstance.cpp:517
virtual FString GetFriendlyName() const override
Definition MaterialInstanceSupport.h:219
Definition MaterialRenderProxy.h:102
ENGINE_API void InvalidateUniformExpressionCache(bool bRecreateUniformBuffer)
Definition MaterialRenderProxy.cpp:634
Definition MaterialShared.h:2058
Definition NameTypes.h:617
Definition RHICommandList.h:455
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
UE_NODEBUG static UE_FORCEINLINE_HINT constexpr uint32 GetTypeSize()
Definition Array.h:1047
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition MaterialInstanceSupport.h:116
TArray< TNamedParameter > Array
Definition MaterialInstanceSupport.h:126
void Empty()
Definition MaterialInstanceSupport.h:197
TArray< uint16 > HashTable
Definition MaterialInstanceSupport.h:127
void HashAddOneItem(int32 AddedIndex)
Definition MaterialInstanceSupport.h:146
static uint32 TypeHash(const ParameterInfo &Info)
Definition MaterialInstanceSupport.h:130
void HashAddAllItems(int32 NumHashBuckets=0)
Definition MaterialInstanceSupport.h:175
Definition UnrealString.h.inl:34
static UE_FORCEINLINE_HINT uint32 GetNumberOfHashBuckets(uint32 NumHashedElements)
Definition ContainerAllocationPolicies.h:1529
int32 Find(CharRangeType &&SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart, int32 StartPosition=INDEX_NONE) const
Definition UnrealString.h.inl:1116
Definition MaterialInstance.h:627
Definition MaterialInterface.h:296
Definition MaterialParameterCollection.h:79
UE_FORCEINLINE_HINT FString GetName() const
Definition UObjectBaseUtility.h:439
Definition RuntimeVirtualTexture.h:18
Definition SparseVolumeTexture.h:309
Definition TextureCollection.h:47
Definition Texture.h:1219
Type
Definition RHIFeatureLevel.h:20
U16 Index
Definition radfft.cpp:71
Definition MaterialInstanceSupport.h:74
FHashedMaterialParameterInfoPacked()
Definition MaterialInstanceSupport.h:80
uint16 Association
Definition MaterialInstanceSupport.h:78
bool operator==(const FHashedMaterialParameterInfoPacked &Other) const
Definition MaterialInstanceSupport.h:103
uint16 HashNext
Definition MaterialInstanceSupport.h:77
bool operator==(const FHashedMaterialParameterInfo &Other) const
Definition MaterialInstanceSupport.h:108
FORCEINLINE FHashedMaterialParameterInfoPacked(const struct FHashedMaterialParameterInfoPacked &Rhs)
Definition MaterialInstanceSupport.h:86
FHashedMaterialParameterInfoPacked & operator=(const FHashedMaterialParameterInfo &InInfo)
Definition MaterialInstanceSupport.h:91
FScriptName Name
Definition MaterialInstanceSupport.h:75
Definition MaterialInstance.h:568
Definition MaterialInstanceSupport.h:449
TArray< THashedMaterialParameterMap< bool >::TNamedParameter > StaticSwitchParameters
Definition MaterialInstanceSupport.h:450
TArray< THashedMaterialParameterMap< const URuntimeVirtualTexture * >::TNamedParameter > RuntimeVirtualTextureParameters
Definition MaterialInstanceSupport.h:456
TArray< THashedMaterialParameterMap< FLinearColor >::TNamedParameter > VectorParameters
Definition MaterialInstanceSupport.h:452
TArray< THashedMaterialParameterMap< const UTextureCollection * >::TNamedParameter > TextureCollectionParameters
Definition MaterialInstanceSupport.h:455
TArray< THashedMaterialParameterMap< const UTexture * >::TNamedParameter > TextureParameters
Definition MaterialInstanceSupport.h:454
TArray< THashedMaterialParameterMap< float >::TNamedParameter > ScalarParameters
Definition MaterialInstanceSupport.h:451
TArray< FUserSceneTextureOverride > UserSceneTextureOverrides
Definition MaterialInstanceSupport.h:459
TArray< THashedMaterialParameterMap< const UMaterialParameterCollection * >::TNamedParameter > ParameterCollectionParameters
Definition MaterialInstanceSupport.h:458
FPostProcessBlendableOverrides PostProcessBlendableOverrides
Definition MaterialInstanceSupport.h:460
TArray< THashedMaterialParameterMap< FVector4d >::TNamedParameter > DoubleVectorParameters
Definition MaterialInstanceSupport.h:453
TArray< THashedMaterialParameterMap< const USparseVolumeTexture * >::TNamedParameter > SparseVolumeTextureParameters
Definition MaterialInstanceSupport.h:457
Definition MaterialParameters.h:33
Definition MaterialParameters.h:341
Definition MaterialShared.h:349
Definition MaterialParameters.h:96
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119
Definition MaterialInstance.h:541
Definition NameTypes.h:491
Definition MaterialInstanceSupport.h:121
FHashedMaterialParameterInfoPacked Info
Definition MaterialInstanceSupport.h:122
ValueType Value
Definition MaterialInstanceSupport.h:123