UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StreamableRenderAsset.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"
7#include "UObject/Object.h"
8#include "Misc/App.h"
14#include "StreamableRenderAsset.generated.h"
15
16#define STREAMABLERENDERASSET_NODEFAULT(FuncName) LowLevelFatalError(TEXT("UStreamableRenderAsset::%s has no default implementation"), TEXT(#FuncName))
17 // Allows yield to lower priority threads
18#define RENDER_ASSET_STREAMING_SLEEP_DT (0.010f)
19
20namespace Nanite
21{
22 class FCoarseMeshStreamingManager;
23}
24
26{
27 None,
28 Texture,
31 LandscapeMeshMobile UE_DEPRECATED(5.1, "LandscapeMeshMobile is now deprecated and will be removed."),
33};
34
35UCLASS(Abstract, MinimalAPI)
37{
39
40public:
41
44
47 {
48 return 0;
49 }
50
51 virtual int32 CalcCumulativeLODSize(int32 NumLODs) const
52 {
53 STREAMABLERENDERASSET_NODEFAULT(CalcCumulativeLODSize);
54 return -1;
55 }
56
57 virtual FIoFilenameHash GetMipIoFilenameHash(const int32 MipIndex) const
58 {
59 STREAMABLERENDERASSET_NODEFAULT(GetMipIoFilenameHash);
61 }
62
63 virtual bool DoesMipDataExist(const int32 MipIndex) const
64 {
65 STREAMABLERENDERASSET_NODEFAULT(DoesMipDataExist);
66 return false;
67 }
68
70 ENGINE_API void CancelPendingStreamingRequest();
71
73 ENGINE_API bool HasPendingInitOrStreaming(bool bWaitForLODTransition = false) const;
74
76 bool IsPendingStreamingRequestLocked() const;
77
85 {
87 return false;
88 }
89
97 virtual bool StreamIn(int32 NewMipCount, bool bHighPrio)
98 {
100 return false;
101 }
102
108
114 virtual float GetLastRenderTimeForStreaming() const { return FLT_MAX; }
115
122 {
123 return bGlobalForceMipLevelsToBeResident
124 || bForceMiplevelsToBeResident
125 || ForceMipLevelsToBeResidentTimestamp >= FApp::GetCurrentTime();
126 }
127
136 ENGINE_API void RegisterMipLevelChangeCallback(UPrimitiveComponent* Component, int32 LODIdx, float TimeoutSecs, bool bOnStreamIn, FLODStreamingCallback&& Callback);
137
147 ENGINE_API void RegisterMipLevelChangeCallback(UPrimitiveComponent* Component, float TimeoutStartSecs, FLODStreamingCallback&& CallbackStreamingStart, float TimeoutDoneSecs, FLODStreamingCallback&& CallbackStreamingDone);
148
153 ENGINE_API void RemoveMipLevelChangeCallback(UPrimitiveComponent* Component);
154
158 ENGINE_API void RemoveAllMipLevelChangeCallbacks();
159
164 ENGINE_API void TickMipLevelChangeCallbacks(TArray<UStreamableRenderAsset*>* DeferredTickCBAssets);
165
171 UFUNCTION(BlueprintCallable, Category = "Rendering")
172 ENGINE_API void SetForceMipLevelsToBeResident(float Seconds, int32 CinematicLODGroupMask = 0);
173
179 virtual int32 GetCachedLODBias() const
180 {
181 return 0;
182 }
183
186 {
187 return CachedSRRState;
188 }
189
191 inline bool RenderResourceSupportsStreaming() const { return CachedSRRState.bSupportsStreaming && CachedSRRState.MaxNumLODs > CachedSRRState.NumNonStreamingLODs; }
192
194 inline bool IsStreamable() const { return StreamingIndex != INDEX_NONE; }
195
197 ENGINE_API void LinkStreaming();
199 ENGINE_API void UnlinkStreaming();
200
202 ENGINE_API bool IsFullyStreamedIn();
203
204 inline int32 GetStreamingIndex() const { return StreamingIndex; }
205
207 ENGINE_API void WaitForPendingInitOrStreaming(bool bWaitForLODTransition = false, bool bSendCompletionEvents = false);
208
210 ENGINE_API void WaitForStreaming(bool bWaitForLODTransition = false, bool bSendCompletionEvents = false);
211
212 void TickStreaming(bool bSendCompletionEvents = false, TArray<UStreamableRenderAsset*>* DeferredTickCBAssets = nullptr);
213
215
216 ENGINE_API virtual void BeginDestroy() override;
217 ENGINE_API virtual bool IsReadyForFinishDestroy() override;
218
220 {
221 return NoRefStreamingLODBias;
222 }
223
225 {
226 NoRefStreamingLODBias = MoveTemp(NewValue);
227 }
228
229 ENGINE_API int32 GetCurrentNoRefStreamingLODBias() const;
230
231protected:
232
233 // Also returns false if the render resource is non existent, to prevent stalling on an event that will never complete.
234 virtual bool HasPendingRenderResourceInitialization() const { return false; }
235
236 virtual bool HasPendingLODTransition() const { return false; }
237
239 {
240 UPrimitiveComponent* Component;
248
251 , DeadlineStart(InDeadlineDone)
252 , DeadlineDone(InDeadlineDone)
253 , ExpectedResidentMips(ExpectedResidentMips)
254 , bOnStreamIn(bInOnStreamIn)
255 , bIsExpectedResidentMipPayload(true)
256 , CallbackStart()
257 , CallbackDone(MoveTemp(InCallbackStreamingDone))
258 {}
259
262 , DeadlineStart(InDeadlineStart)
263 , DeadlineDone(InDeadlineDone)
264 , ExpectedResidentMips()
265 , bOnStreamIn()
266 , bIsExpectedResidentMipPayload(false)
267 , CallbackStart(MoveTemp(InCallbackStreamingStart))
268 , CallbackDone(MoveTemp(InCallbackStreamingDone))
269 {}
270 };
271
273
276
279 double ForceMipLevelsToBeResidentTimestamp;
280
281public:
283 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LevelOfDetail, AdvancedDisplay)
284 int32 NumCinematicMipLevels;
285
287 UPROPERTY()
288 FPerQualityLevelInt NoRefStreamingLODBias;
289
291 UPROPERTY(transient, duplicatetransient, NonTransactional)
292 int32 StreamingIndex = INDEX_NONE;
293
296 TSharedPtr<int32, ESPMode::ThreadSafe> SimpleStreamableAssetManagerIndex = MakeShared<int32, ESPMode::ThreadSafe>(INDEX_NONE);
297public:
298 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LevelOfDetail, AssetRegistrySearchable, AdvancedDisplay)
300
302 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = LevelOfDetail, meta = (DisplayName = "Global Force Resident Mip Levels"), AdvancedDisplay)
303 uint8 bGlobalForceMipLevelsToBeResident : 1;
304
306 UPROPERTY(transient, NonTransactional)
307 uint8 bHasStreamingUpdatePending : 1;
308
311 uint8 bForceMiplevelsToBeResident : 1;
312
315 uint8 bIgnoreStreamingMipBias : 1;
316
319 uint8 bMarkAsEditorStreamingPool : 1;
320
324 uint8 bUseCinematicMipLevels : 1;
325
328
331 friend class Nanite::FCoarseMeshStreamingManager;
332};
const FIoFilenameHash INVALID_IO_FILENAME_HASH
Definition BulkData.h:69
uint32 FIoFilenameHash
Definition BulkData.h:68
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
TSharedRef< InObjectType, InMode > MakeShared(InArgTypes &&... Args)
Definition SharedPointer.h:2009
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
ESPMode
Definition SharedPointerFwd.h:12
#define STREAMABLERENDERASSET_NODEFAULT(FuncName)
Definition StreamableRenderAsset.h:16
EStreamableRenderAssetType
Definition StreamableRenderAsset.h:26
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
static FORCEINLINE double GetCurrentTime()
Definition App.h:602
Definition AsyncTextureStreaming.h:22
Definition SimpleStreamableAssetManager.h:129
Definition Array.h:670
Definition RefCounting.h:454
Definition SharedPointer.h:692
Definition Object.h:95
Definition StreamableRenderAsset.h:37
bool IsStreamable() const
Definition StreamableRenderAsset.h:194
virtual void InvalidateLastRenderTimeForStreaming()
Definition StreamableRenderAsset.h:107
virtual float GetLastRenderTimeForStreaming() const
Definition StreamableRenderAsset.h:114
virtual bool HasPendingRenderResourceInitialization() const
Definition StreamableRenderAsset.h:234
bool RenderResourceSupportsStreaming() const
Definition StreamableRenderAsset.h:191
TRefCountPtr< class FRenderAssetUpdate > PendingUpdate
Definition StreamableRenderAsset.h:275
virtual EStreamableRenderAssetType GetRenderAssetType() const
Definition StreamableRenderAsset.h:214
virtual FIoFilenameHash GetMipIoFilenameHash(const int32 MipIndex) const
Definition StreamableRenderAsset.h:57
virtual bool StreamOut(int32 NewMipCount)
Definition StreamableRenderAsset.h:84
virtual bool HasPendingLODTransition() const
Definition StreamableRenderAsset.h:236
const FPerQualityLevelInt & GetNoRefStreamingLODBias() const
Definition StreamableRenderAsset.h:219
void SetNoRefStreamingLODBias(FPerQualityLevelInt NewValue)
Definition StreamableRenderAsset.h:224
virtual bool StreamIn(int32 NewMipCount, bool bHighPrio)
Definition StreamableRenderAsset.h:97
TArray< FLODStreamingCallbackPayload > MipChangeCallbacks
Definition StreamableRenderAsset.h:272
virtual int32 CalcCumulativeLODSize(int32 NumLODs) const
Definition StreamableRenderAsset.h:51
int32 GetStreamingIndex() const
Definition StreamableRenderAsset.h:204
virtual bool ShouldMipLevelsBeForcedResident() const
Definition StreamableRenderAsset.h:121
virtual int32 GetLODGroupForStreaming() const
Definition StreamableRenderAsset.h:46
virtual ENGINE_API ~UStreamableRenderAsset()
virtual bool DoesMipDataExist(const int32 MipIndex) const
Definition StreamableRenderAsset.h:63
const FStreamableRenderResourceState & GetStreamableResourceState() const
Definition StreamableRenderAsset.h:185
Definition SkinnedMeshComponent.h:50
@ false
Definition radaudio_common.h:23
Definition PerQualityLevelProperties.h:233
Definition StreamingManagerTexture.h:32
Definition StreamableRenderResourceState.h:23
Definition StreamingTexture.h:23
Definition StreamableRenderAsset.h:239
UPrimitiveComponent * Component
Definition StreamableRenderAsset.h:240
FLODStreamingCallbackPayload(UPrimitiveComponent *InComponent, double InDeadlineDone, int32 ExpectedResidentMips, bool bInOnStreamIn, FLODStreamingCallback &&InCallbackStreamingDone)
Definition StreamableRenderAsset.h:249
bool bOnStreamIn
Definition StreamableRenderAsset.h:244
FLODStreamingCallbackPayload(UPrimitiveComponent *InComponent, double InDeadlineStart, FLODStreamingCallback &&InCallbackStreamingStart, double InDeadlineDone, FLODStreamingCallback &&InCallbackStreamingDone)
Definition StreamableRenderAsset.h:260
double DeadlineDone
Definition StreamableRenderAsset.h:242
FLODStreamingCallback CallbackDone
Definition StreamableRenderAsset.h:247
double DeadlineStart
Definition StreamableRenderAsset.h:241
int32 ExpectedResidentMips
Definition StreamableRenderAsset.h:243
FLODStreamingCallback CallbackStart
Definition StreamableRenderAsset.h:246
bool bIsExpectedResidentMipPayload
Definition StreamableRenderAsset.h:245