UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SlateRHIResourceManager.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"
6#include "Stats/Stats.h"
8#include "UObject/GCObject.h"
9#include "UObject/ObjectKey.h"
10#include "Containers/Queue.h"
15#include "Tickable.h"
17
22class ISlateStyle;
23class UTexture;
24class FSceneInterface;
26
32{
36
42
43 friend bool operator==(const FMaterialKey& Lhs, const FMaterialKey& Rhs)
44 {
45 return Lhs.Material == Rhs.Material && Lhs.ImageSize == Rhs.ImageSize && Lhs.MaskKey == Rhs.MaskKey;
46 }
47
48 friend uint32 GetTypeHash(const FMaterialKey& Key)
49 {
50 return HashCombine(GetTypeHash(Key.Material), HashCombine(GetTypeHash(Key.ImageSize), Key.MaskKey));
51 }
52};
53
55{
56public:
58
60
62
64
66
68 void RemoveUTextureResource( UTexture* TextureObject );
69
71 void RemoveDynamicTextureResource( FName ResourceName );
72
75
77 void RemoveAtlasedTextureResource(UTexture* TextureObject);
78
80
81 void Empty();
82
86
87 void ReleaseResources();
88
89 uint32 GetNumObjectResources() const { return TextureMap.Num() + MaterialMap.Num(); }
90
91public:
94
95private:
97
100 FTextureResourceMap TextureMap;
101
103 typedef TMap<FMaterialKey, TSharedPtr<FSlateMaterialResource> > FMaterialResourceMap;
104 FMaterialResourceMap MaterialMap;
105
108 FObjectResourceMap ObjectMap;
109};
110
115{
116public:
119
121 virtual int32 GetNumAtlasPages() const override;
122 virtual FSlateShaderResource* GetAtlasPageResource(const int32 InIndex) const override;
123 virtual bool IsAtlasPageResourceAlphaOnly(const int32 InIndex) const override;
124#if WITH_ATLAS_DEBUGGING
125 virtual FAtlasSlotInfo GetAtlasSlotInfoAtPosition(FIntPoint InPosition, int32 AtlasIndex) const override;
126#endif
127
130 virtual bool IsTickableWhenPaused() const override { return true; }
131 virtual bool IsTickableInEditor() const override { return true; }
133 virtual void Tick(float DeltaSeconds) override;
134
139 void LoadUsedTextures();
140
141 void LoadStyleResources( const ISlateStyle& Style );
142
148
150 virtual FSlateShaderResourceProxy* GetShaderResource(const FSlateBrush& InBrush, FVector2f LocalSize, float DrawScale) override;
153
160
170
172
179
183 bool ContainsTexture( const FName& ResourceName ) const;
184
187
193 virtual bool LoadTexture( const FName& TextureName, const FString& ResourcePath, uint32& Width, uint32& Height, TArray<uint8>& DecodedImage );
194 virtual bool LoadTexture( const FSlateBrush& InBrush, uint32& Width, uint32& Height, TArray<uint8>& DecodedImage );
195
196
200 void ReleaseResources();
201
207 void ReloadTextures();
208
212 void ClearScenes();
213
214 FCriticalSection* GetResourceCriticalSection() { return &ResourceCriticalSection; }
215
216private:
217 void CreateVectorGraphicsCache();
218
219 void OnPreGarbageCollect();
220 void OnPostGarbageCollect();
221
222 void TryToCleanupExpiredResources(bool bForceCleanup);
223 void CleanupExpiredResources();
224
228 void DeleteResources();
229
233 void DeleteUObjectBrushResources();
234
238 void DeleteBrushResourcesCommand();
239
245 void CreateTextures( const TArray< const FSlateBrush* >& Resources );
246
252 FSlateShaderResourceProxy* GenerateTextureResource( const FNewTextureInfo& Info, const FName TextureName );
253
260 FSlateShaderResourceProxy* FindOrCreateDynamicTextureResource( const FSlateBrush& InBrush );
261
267 FSlateMaterialResource* GetMaterialResource( const UObject* InMaterial, const FSlateBrush* InBrush, FSlateShaderResource* TextureMask, int32 InMaskKey );
268
276 FSlateShaderResourceProxy* GetVectorResource(const FSlateBrush& Brush, FVector2f LocalSize, float DrawScale);
277
281 void OnAppExit();
282
286 UTexture* GetBadResourceTexture();
287
288private:
293 FCriticalSection ResourceCriticalSection;
294
296 bool bResourceCriticalSectionLockedForGC;
297
299 bool bExpiredResourcesNeedCleanup;
300
302 FDynamicResourceMap DynamicResourceMap;
308 TArray< TSharedPtr<FSlateMaterialResource> > MaterialResourceFreeList;
310 TArray<class FSlateTextureAtlasRHI*> PrecachedTextureAtlases;
312 TArray<class FSlateTexture2DRHIRef*> NonAtlasedTextures;
314 uint32 AtlasSize;
316 FIntPoint MaxAltasedTextureSize;
318 UTexture* BadResourceTexture;
319
321 TArray<FSceneInterface*> ActiveScenes;
322
324 FAutoConsoleCommand DeleteResourcesCommand;
325
327 TUniquePtr<FSlateVectorGraphicsCache> VectorGraphicsCache;
328};
329
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define RETURN_QUICK_DECLARE_CYCLE_STAT(StatId, GroupId)
Definition Stats.h:655
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
ETickableTickType
Definition Tickable.h:20
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IConsoleManager.h:2026
Definition NameTypes.h:617
Definition SceneInterface.h:106
Definition SlateAtlasedTextureResource.h:15
Definition SlateNativeTextureResource.h:12
Definition SlateMaterialResource.h:15
Definition SlateRHIResourceManager.h:115
FCriticalSection * GetResourceCriticalSection()
Definition SlateRHIResourceManager.h:214
TSharedPtr< FSlateDynamicTextureResource > MakeDynamicTextureResource(FName ResourceName, uint32 Width, uint32 Height, const TArray< uint8 > &Bytes)
Definition SlateRHIResourceManager.cpp:706
int32 GetSceneCount()
Definition SlateRHIResourceManager.cpp:1168
bool ContainsTexture(const FName &ResourceName) const
Definition SlateRHIResourceManager.cpp:964
void LoadStyleResources(const ISlateStyle &Style)
Definition SlateRHIResourceManager.cpp:1042
virtual bool IsAtlasPageResourceAlphaOnly(const int32 InIndex) const override
Definition SlateRHIResourceManager.cpp:373
void ConditionalFlushAtlases()
Definition SlateRHIResourceManager.cpp:1061
virtual FSlateShaderResourceProxy * GetShaderResource(const FSlateBrush &InBrush, FVector2f LocalSize, float DrawScale) override
Definition SlateRHIResourceManager.cpp:630
FSlateRHIResourceManager()
Definition SlateRHIResourceManager.cpp:244
virtual bool IsTickableInEditor() const override
Definition SlateRHIResourceManager.h:131
FSceneInterface * GetSceneAt(int32 Index)
Definition SlateRHIResourceManager.cpp:1174
void ReleaseResources()
Definition SlateRHIResourceManager.cpp:1066
virtual TStatId GetStatId() const override
Definition SlateRHIResourceManager.h:132
virtual bool LoadTexture(const FName &TextureName, const FString &ResourcePath, uint32 &Width, uint32 &Height, TArray< uint8 > &DecodedImage)
Definition SlateRHIResourceManager.cpp:514
virtual FSlateShaderResource * GetAtlasPageResource(const int32 InIndex) const override
Definition SlateRHIResourceManager.cpp:368
virtual bool IsTickableWhenPaused() const override
Definition SlateRHIResourceManager.h:130
virtual int32 GetNumAtlasPages() const override
Definition SlateRHIResourceManager.cpp:363
virtual FSlateShaderResource * GetFontShaderResource(int32 InTextureAtlasIndex, FSlateShaderResource *FontTextureAtlas, const class UObject *FontMaterial) override
Definition SlateRHIResourceManager.cpp:673
virtual ~FSlateRHIResourceManager()
Definition SlateRHIResourceManager.cpp:285
void ReleaseDynamicResource(const FSlateBrush &InBrush)
Definition SlateRHIResourceManager.cpp:969
void AddSceneAt(FSceneInterface *Scene, int32 Index)
Definition SlateRHIResourceManager.cpp:1180
void ReloadTextures()
Definition SlateRHIResourceManager.cpp:1137
void LoadUsedTextures()
Definition SlateRHIResourceManager.cpp:1034
void UpdateTextureAtlases()
Definition SlateRHIResourceManager.cpp:1050
virtual ETickableTickType GetTickableTickType() const override
Definition SlateRHIResourceManager.h:129
virtual ISlateAtlasProvider * GetTextureAtlasProvider() override
Definition SlateRHIResourceManager.cpp:701
TSharedPtr< FSlateDynamicTextureResource > GetDynamicTextureResourceByName(FName ResourceName)
Definition SlateRHIResourceManager.cpp:755
void ClearScenes()
Definition SlateRHIResourceManager.cpp:1190
TSharedPtr< FSlateUTextureResource > MakeDynamicUTextureResource(UTexture *InTextureObject)
Definition SlateRHIResourceManager.cpp:760
Definition ShaderResourceManager.h:44
Definition SlateShaderResource.h:129
Definition SlateShaderResource.h:44
Definition SlateUTextureResource.h:71
Definition SlateVectorGraphicsCache.h:15
Definition Tickable.h:135
Definition TextureAtlas.h:328
Definition ISlateStyle.h:18
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition UniquePtr.h:107
Definition MaterialInterface.h:296
Definition Object.h:95
Definition Texture.h:1219
U16 Index
Definition radfft.cpp:71
Definition TextureAtlas.h:244
Definition SlateRHIResourceManager.h:55
void RemoveMaterialResource(const FMaterialKey &InKey)
Definition SlateRHIResourceManager.cpp:163
FSlateShaderResourceProxy * FindOrCreateAtlasedProxy(UObject *InObject)
TSharedPtr< FSlateUTextureResource > GetUTextureResource(UTexture *TextureObject) const
Definition SlateRHIResourceManager.cpp:104
void AddDynamicTextureResource(FName ResourceName, TSharedRef< FSlateDynamicTextureResource > InResource)
Definition SlateRHIResourceManager.cpp:130
void Empty()
Definition SlateRHIResourceManager.cpp:181
void AddUTextureResource(UTexture *TextureObject, TSharedRef< FSlateUTextureResource > InResource)
Definition SlateRHIResourceManager.cpp:135
void AddAtlasedTextureResource(UTexture *TextureObject, TSharedRef< FSlateAtlasedTextureResource > InResource)
Definition SlateRHIResourceManager.cpp:168
void ReleaseResources()
Definition SlateRHIResourceManager.cpp:203
TSharedPtr< FSlateAtlasedTextureResource > GetAtlasedTextureResource(UTexture *InObject) const
Definition SlateRHIResourceManager.cpp:114
void RemoveDynamicTextureResource(FName ResourceName)
Definition SlateRHIResourceManager.cpp:150
void EmptyUTextureResources()
Definition SlateRHIResourceManager.cpp:193
void RemoveExpiredMaterialResources(TArray< TSharedPtr< FSlateMaterialResource > > &RemovedMaterials)
Definition SlateRHIResourceManager.cpp:230
FDynamicResourceMap()
Definition SlateRHIResourceManager.cpp:95
void RemoveExpiredTextureResources(TArray< TSharedPtr< FSlateUTextureResource > > &RemovedTextures)
Definition SlateRHIResourceManager.cpp:216
TSharedPtr< FSlateDynamicTextureResource > GetDynamicTextureResource(FName ResourceName) const
Definition SlateRHIResourceManager.cpp:99
void AddMaterialResource(const FMaterialKey &InKey, TSharedRef< FSlateMaterialResource > InResource)
Definition SlateRHIResourceManager.cpp:144
void RemoveUTextureResource(UTexture *TextureObject)
Definition SlateRHIResourceManager.cpp:155
TSharedPtr< FSlateMaterialResource > GetMaterialResource(const FMaterialKey &InKey) const
Definition SlateRHIResourceManager.cpp:124
void EmptyMaterialResources()
Definition SlateRHIResourceManager.cpp:198
uint32 GetNumObjectResources() const
Definition SlateRHIResourceManager.h:89
void EmptyDynamicTextureResources()
Definition SlateRHIResourceManager.cpp:188
void RemoveAtlasedTextureResource(UTexture *TextureObject)
Definition SlateRHIResourceManager.cpp:176
Definition SlateRHIResourceManager.h:32
const FVector2f ImageSize
Definition SlateRHIResourceManager.h:34
FMaterialKey(const UMaterialInterface *InMaterial, const FVector2f InImageSize, int32 InMaskKey)
Definition SlateRHIResourceManager.h:37
friend uint32 GetTypeHash(const FMaterialKey &Key)
Definition SlateRHIResourceManager.h:48
int32 MaskKey
Definition SlateRHIResourceManager.h:35
FObjectKey Material
Definition SlateRHIResourceManager.h:33
friend bool operator==(const FMaterialKey &Lhs, const FMaterialKey &Rhs)
Definition SlateRHIResourceManager.h:43
Definition ShaderResourceManager.h:16
Definition ObjectKey.h:19
Definition SlateBrush.h:239
Definition LightweightStats.h:416
Definition IntPoint.h:25