UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MaterialInstanceSupport.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 MaterialInstance.h: MaterialInstance definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "RenderingThread.h"
11#include "MaterialShared.h"
15#include <limits>
16
17class UTexture;
19
25
32
35{
36public:
37#if !WITH_EDITOR
39#else
41 {
43 {
44 bIsInGameThread = IsInGameThread();
46
47 if (Material->GetReentrantFlag(bIsInGameThread) == true)
48 {
49 UE_LOG(LogMaterial, Warning, TEXT("InMaterial: %s GameThread: %d RenderThread: %d"), *InMaterial->GetFullName(), IsInGameThread(), IsInRenderingThread());
50 check(!Material->GetReentrantFlag(bIsInGameThread));
51 }
52 Material->SetReentrantFlag(true, bIsInGameThread);
53 }
54 }
55
57 {
58 Material->SetReentrantFlag(false, bIsInGameThread);
59 }
60
61private:
62 bool bIsInGameThread;
64#endif // WITH_EDITOR
65};
66
74{
79
85
90
92 {
93 check((InInfo.Index >= std::numeric_limits<int16>::min()) && (InInfo.Index <= std::numeric_limits<int16>::max()));
94 check(InInfo.Association <= 3);
95
96 Name = InInfo.Name;
97 Index = (int16)InInfo.Index;
98 Association = InInfo.Association;
99 return *this;
100 }
101
104 {
105 return Name == Other.Name && Index == Other.Index && Association == Other.Association;
106 }
107
109 {
110 return Name == Other.Name && Index == Other.Index && Association == Other.Association;
111 }
112};
113
114template <typename ValueType>
116{
117public:
118
125
127 TArray<uint16> HashTable; // Indices are plus one, so zero represents invalid index
128
129 template<typename ParameterInfo>
130 static uint32 TypeHash(const ParameterInfo& Info)
131 {
132 // We expect the Name to be the only part of the key to vary in 99.995% of keys. If this changes, we could make
133 // the hash take into account more fields than just Name, at some cost in perf generating the hash. It's important
134 // to mix the key bits, because GetTypeHash(FScriptName) just returns an index, which is not good for a hash table.
135 int32 Key = GetTypeHash(Info.Name);
136 Key += ~(Key << 15);
137 Key ^= (Key >> 10);
138 Key += (Key << 3);
139 Key ^= (Key >> 6);
140 Key += ~(Key << 11);
141 Key ^= (Key >> 16);
142 return (uint32)Key;
143 }
144
145 // Add an item from the Array to the hash table. Hash table must already be allocated.
147 {
148 // Clear next index -- we will be adding the item at the end of the bucket it ends up in.
149 Array[AddedIndex].Info.HashNext = 0;
150
153 int32 ItemIndex = HashTable[HashIndex];
154
155 if (!ItemIndex)
156 {
157 // Add to root table. Indices are plus one, so zero represents invalid index.
158 HashTable[HashIndex] = AddedIndex + 1;
159 }
160 else
161 {
162 // Items in table are incremented by one, get the actual item index
163 ItemIndex--;
164
165 // Find the last item in the chain
166 for (int32 NextItem = Array[ItemIndex].Info.HashNext; NextItem; NextItem = Array[NextItem].Info.HashNext)
167 {
168 ItemIndex = NextItem;
169 }
170 Array[ItemIndex].Info.HashNext = (uint16)AddedIndex;
171 }
172 }
173
174 // Add all items to hash table. Can be used to rehash the full array.
176 {
177 // If zero is passed in (or anything invalid), choose a default size
178 if (NumHashBuckets <= 0)
179 {
181 }
182 if (Array.IsEmpty())
183 {
185 }
186 else
187 {
190 for (int32 Index = 0; Index < Array.Num(); Index++)
191 {
193 }
194 }
195 }
196
197 void Empty()
198 {
199 Array.Empty();
201 }
202};
203
208{
209public:
212
216 void GameThread_Destroy();
217
218 // FRenderResource interface.
219 virtual FString GetFriendlyName() const override { return Owner->GetName(); }
220
221 // FMaterialRenderProxy interface.
223 virtual const FMaterial* GetMaterialNoFallback(ERHIFeatureLevel::Type FeatureLevel) const override;
225 virtual UMaterialInterface* GetMaterialInterface() const override;
226
228 virtual bool GetUserSceneTextureOverride(FName& InOutValue) const override;
229 virtual EBlendableLocation GetBlendableLocation(const FMaterial* Base) const override;
230 virtual int32 GetBlendablePriority(const FMaterial* Base) const override;
231
233
235
237
242 {
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();
253 }
254
258 template <typename ValueType>
259 void RenderThread_UpdateParameter(const FHashedMaterialParameterInfo& ParameterInfo, const ValueType& Value )
260 {
261 LLM_SCOPE(ELLMTag::MaterialInstance);
262
266
267 if (Index != INDEX_NONE)
268 {
269 ValueArray.Array[Index].Value = Value;
270 }
271 else
272 {
274 NewParameter.Info = ParameterInfo;
275 NewParameter.Value = Value;
276 ValueArray.Array.Add(NewParameter);
277
278 // FHashedMaterialParameterInfoPacked::HashNext is limited to 14 bits
279 check(ValueArray.Array.Num() <= (1<<14));
280
282 if (NumHashBuckets == ValueArray.HashTable.Num())
283 {
284 ValueArray.HashAddOneItem(ValueArray.Array.Num() - 1);
285 }
286 else
287 {
289 }
290 }
291 }
292
296 template <typename ValueType>
298 {
301
302 if (Index != INDEX_NONE && IsValidParameterValue(ValueArray.Array[Index].Value))
303 {
304 OutValue = ValueArray.Array[Index].Value;
305 return true;
306 }
307 return false;
308 }
309
310private:
311 virtual void EvaluateParameterCollections(FRHICommandListBase& RHICmdList, FUniformExpressionCache& OutUniformExpressionCache, const FMaterialRenderContext& Context, FUniformExpressionCacheAsyncUpdater* Updater) const override;
312
316 template <typename ValueType> THashedMaterialParameterMap<ValueType>& GetValueArray() { return ScalarParameterArray; }
317 template <typename ValueType> const THashedMaterialParameterMap<ValueType>& GetValueArray() const { return ScalarParameterArray; }
318
319 static bool IsValidParameterValue(float) { return true; }
320 static bool IsValidParameterValue(const FLinearColor&) { return true; }
321 static bool IsValidParameterValue(const FVector4d&) { return true; }
322 static bool IsValidParameterValue(const UTexture* Value) { return Value != nullptr; }
323 static bool IsValidParameterValue(const UTextureCollection* Value) { return Value != nullptr; }
324 static bool IsValidParameterValue(const UMaterialParameterCollection* Value) { return Value != nullptr; }
325 static bool IsValidParameterValue(const URuntimeVirtualTexture* Value) { return Value != nullptr; }
326 static bool IsValidParameterValue(const USparseVolumeTexture* Value) { return Value != nullptr; }
327 static bool IsValidParameterValue(FName Value) { return true; }
328
329 virtual void StartCacheUniformExpressions() const override;
330 virtual void FinishCacheUniformExpressions() const override;
331
332 // Validation logic that exhaustively searches the array, to compare with what the hash table logic finds
333 #define HASHED_MATERIAL_PARAMETER_MAP_VALIDATE 0
334
335 template <typename ValueType>
336 int32 RenderThread_FindParameterByNameInternal(const FHashedMaterialParameterInfo& ParameterInfo) const
337 {
339
340#if HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
342 for (int32 Index = 0; Index < ValueArray.Array.Num(); Index++)
343 {
344 if (ValueArray.Array[Index].Info == ParameterInfo)
345 {
347 break;
348 }
349 }
350#endif // HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
351
352 uint32 HashTableSize = ValueArray.HashTable.Num();
353 if (HashTableSize)
354 {
356 uint32 HashIndex = HashValue & (HashTableSize - 1);
357 int32 ItemIndex = (int32)ValueArray.HashTable[HashIndex];
358
359 if (ItemIndex)
360 {
361 // Items in table are incremented by one, get the actual item index
362 ItemIndex--;
363 do
364 {
365 if (ValueArray.Array[ItemIndex].Info == ParameterInfo)
366 {
367#if HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
368 check(ValidateItemIndex == ItemIndex);
369#endif
370 return ItemIndex;
371 }
372
373 // Additional items in a chain must have a non-zero index, because items in the array are linked to buckets
374 // in order, so the zeroeth item in the array must be first in its bucket, and zero can't be a valid next index.
375 ItemIndex = (int32)ValueArray.Array[ItemIndex].Info.HashNext;
376
377 } while (ItemIndex);
378 }
379 }
380 else
381 {
382 // No hash table -- item array should also be empty
383 check(ValueArray.Array.IsEmpty());
384 }
385
386#if HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
388#endif
389 return INDEX_NONE;
390 }
391
392 #undef HASHED_MATERIAL_PARAMETER_MAP_VALIDATE
393
395 UMaterialInterface* Parent;
396
398 UMaterialInstance* Owner;
399
401 UMaterialInterface* GameThreadParent;
402
404 THashedMaterialParameterMap<bool> StaticSwitchParameterArray;
408 THashedMaterialParameterMap<FVector4d> DoubleVectorParameterArray;
410 THashedMaterialParameterMap<float> ScalarParameterArray;
414 THashedMaterialParameterMap<const UTextureCollection*> TextureCollectionParameterArray;
416 THashedMaterialParameterMap<const URuntimeVirtualTexture*> RuntimeVirtualTextureParameterArray;
418 THashedMaterialParameterMap<const USparseVolumeTexture*> SparseVolumeTextureParameterArray;
422 TArray<int32> ParentLayerIndexRemap;
424 TArray<FUserSceneTextureOverride> UserSceneTextureOverrides;
426 FPostProcessBlendableOverrides PostProcessBlendableOverrides;
427};
428
429template <> FORCEINLINE THashedMaterialParameterMap<bool>& FMaterialInstanceResource::GetValueArray() { return StaticSwitchParameterArray; }
430template <> FORCEINLINE THashedMaterialParameterMap<float>& FMaterialInstanceResource::GetValueArray() { return ScalarParameterArray; }
431template <> FORCEINLINE THashedMaterialParameterMap<FLinearColor>& FMaterialInstanceResource::GetValueArray() { return VectorParameterArray; }
432template <> FORCEINLINE THashedMaterialParameterMap<FVector4d>& FMaterialInstanceResource::GetValueArray() { return DoubleVectorParameterArray; }
433template <> FORCEINLINE THashedMaterialParameterMap<const UTexture*>& FMaterialInstanceResource::GetValueArray() { return TextureParameterArray; }
434template <> FORCEINLINE THashedMaterialParameterMap<const UTextureCollection*>& FMaterialInstanceResource::GetValueArray() { return TextureCollectionParameterArray; }
435template <> FORCEINLINE THashedMaterialParameterMap<const URuntimeVirtualTexture*>& FMaterialInstanceResource::GetValueArray() { return RuntimeVirtualTextureParameterArray; }
436template <> FORCEINLINE THashedMaterialParameterMap<const USparseVolumeTexture*>& FMaterialInstanceResource::GetValueArray() { return SparseVolumeTextureParameterArray; }
437template <> FORCEINLINE THashedMaterialParameterMap<const UMaterialParameterCollection*>& FMaterialInstanceResource::GetValueArray() { return ParameterCollectionParameterArray; }
438template <> FORCEINLINE const THashedMaterialParameterMap<bool>& FMaterialInstanceResource::GetValueArray() const { return StaticSwitchParameterArray; }
439template <> FORCEINLINE const THashedMaterialParameterMap<float>& FMaterialInstanceResource::GetValueArray() const { return ScalarParameterArray; }
440template <> FORCEINLINE const THashedMaterialParameterMap<FLinearColor>& FMaterialInstanceResource::GetValueArray() const { return VectorParameterArray; }
441template <> FORCEINLINE const THashedMaterialParameterMap<FVector4d>& FMaterialInstanceResource::GetValueArray() const { return DoubleVectorParameterArray; }
442template <> FORCEINLINE const THashedMaterialParameterMap<const UTexture*>& FMaterialInstanceResource::GetValueArray() const { return TextureParameterArray; }
443template <> FORCEINLINE const THashedMaterialParameterMap<const UTextureCollection*>& FMaterialInstanceResource::GetValueArray() const { return TextureCollectionParameterArray; }
444template <> FORCEINLINE const THashedMaterialParameterMap<const URuntimeVirtualTexture*>& FMaterialInstanceResource::GetValueArray() const { return RuntimeVirtualTextureParameterArray; }
445template <> FORCEINLINE const THashedMaterialParameterMap<const USparseVolumeTexture*>& FMaterialInstanceResource::GetValueArray() const { return SparseVolumeTextureParameterArray; }
446template <> FORCEINLINE const THashedMaterialParameterMap<const UMaterialParameterCollection*>& FMaterialInstanceResource::GetValueArray() const { return ParameterCollectionParameterArray; }
447
462
464template <typename ParameterType>
466{
467 for (int32 ParameterIndex = 0; ParameterIndex < Parameters.Num(); ParameterIndex++)
468 {
469 ParameterType* Parameter = &Parameters[ParameterIndex];
470 if (Parameter->ParameterInfo == ParameterInfo)
471 {
472 return Parameter;
473 }
474 }
475 return NULL;
476}
477
478template <typename ParameterType>
479const ParameterType* GameThread_FindParameterByName(const TArray<ParameterType>& Parameters, const FHashedMaterialParameterInfo& ParameterInfo)
480{
481 for (int32 ParameterIndex = 0; ParameterIndex < Parameters.Num(); ParameterIndex++)
482 {
483 const ParameterType* Parameter = &Parameters[ParameterIndex];
484 if (Parameter->ParameterInfo == ParameterInfo)
485 {
486 return Parameter;
487 }
488 }
489 return NULL;
490}
491
492template <typename ParameterType>
494{
495 for (int32 ParameterIndex = 0; ParameterIndex < Parameters.Num(); ++ParameterIndex)
496 {
497 const ParameterType* Parameter = &Parameters[ParameterIndex];
498 if (Parameter->ParameterInfo == ParameterInfo)
499 {
500 return ParameterIndex;
501 }
502 }
503
504 return INDEX_NONE;
505}
506
508template <typename ParameterType>
510{
511 if (!Parameters.IsValidIndex(Index))
512 {
513 return nullptr;
514 }
515
516 return &Parameters[Index];
517}
518
519template <typename ParameterType>
520const ParameterType* GameThread_FindParameterByIndex(const TArray<ParameterType>& Parameters, int32 Index)
521{
522 if (!Parameters.IsValidIndex(Index))
523 {
524 return nullptr;
525 }
526
527 return &Parameters[Index];
528}
529
530template <typename ParameterType>
532{
533 for (int32 ParameterIndex = 0; ParameterIndex < Parameters.Num(); ParameterIndex++)
534 {
535 const ParameterType* Parameter = &Parameters[ParameterIndex];
536 if (Parameter->IsOverride() && Parameter->IsValid() && Parameter->ParameterInfo == ParameterInfo)
537 {
538 Parameter->GetValue(OutResult);
539 return true;
540 }
541 }
542 return false;
543}
544
545template <typename ParameterType, typename OverridenParametersType>
547 const TArray<ParameterType>& Parameters,
549 bool bSetOverride,
550 OverridenParametersType& OverridenParameters, // TSet<FMaterialParameterInfo, ...>
552 bool bAddIfNotFound = false)
553{
554 for (int32 ParameterIndex = 0; ParameterIndex < Parameters.Num(); ParameterIndex++)
555 {
556 const ParameterType* Parameter = &Parameters[ParameterIndex];
557 if (Parameter->IsOverride())
558 {
559 FMaterialParameterInfo ParameterInfo;
560 if (Parameter->ParameterInfo.RemapLayerIndex(LayerIndexRemap, ParameterInfo))
561 {
562 bool bPreviouslyOverriden = false;
563 OverridenParameters.Add(ParameterInfo, &bPreviouslyOverriden);
565 {
566 FMaterialParameterMetadata* Result = bAddIfNotFound ? &OutParameters.FindOrAdd(ParameterInfo) : OutParameters.Find(ParameterInfo);
567 if (Result)
568 {
569 Parameter->GetValue(*Result);
570#if WITH_EDITORONLY_DATA
571 if (bSetOverride)
572 {
573 Result->bOverride = true;
574 }
575#endif // WITH_EDITORONLY_DATA
576 }
577 }
578 }
579 }
580 }
581}
582
583template<typename TArrayType>
585{
586 TArrayType NewLayerIndexRemap;
588
589 check(LayerIndexRemap.Num() == ParentLayerIndexRemap.Num());
590 for (int32 i = 0; i < ParentLayerIndexRemap.Num(); ++i)
591 {
592 const int32 ParentLayerIndex = ParentLayerIndexRemap[i];
594 {
596 }
597 }
599}
#define NULL
Definition oodle2base.h:134
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define check(expr)
Definition AssertionMacros.h:314
EBlendableLocation
Definition BlendableInterface.h:15
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
#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
#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
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
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 MaterialRenderProxy.cpp:112
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
Definition Array.h:670
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 Color.h:48
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:446
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 MaterialRenderProxy.h:49
Definition MaterialInstanceSupport.h:121
FHashedMaterialParameterInfoPacked Info
Definition MaterialInstanceSupport.h:122
ValueType Value
Definition MaterialInstanceSupport.h:123