UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TextureDerivedDataTask.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*==============================================================================
4 TextureDerivedDataTask.h: Tasks to update texture DDC.
5==============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10
11#if WITH_EDITOR
12
13#include "Async/AsyncWork.h"
15#include "Engine/Texture2D.h"
16#include "IImageWrapperModule.h"
17#include "ImageCore.h"
18#include "TextureCompiler.h"
19#include "Misc/EnumClassFlags.h"
20#include "TextureCompressorModule.h"
22
23#endif // WITH_EDITOR
24
25
26enum
27{
33};
34
35#if WITH_EDITOR
36
37namespace UE::DerivedData { class FBuildOutput; }
38
41
42enum class ETextureCacheFlags : uint32
43{
44 None = 0x00,
45 Async = 0x01,
46 ForceRebuild = 0x02,
47
52 InlineMips = 0x08,
53 AllowAsyncBuild = 0x10,
54 ForDDCBuild = 0x20,
56 AllowAsyncLoading = 0x80,
58};
59
61
62// Everything required to get the texture source data.
64{
67};
68
70{
71 TArray<TArray<FImage>> MipsPerLayer; // @@ use FImageView instead
72 int32 BlockX = 0;
73 int32 BlockY = 0;
74 int32 SizeInBlocksX = 1; // Normally each blocks covers a 1x1 block area
75 int32 SizeInBlocksY = 1;
76 int32 SizeX = 0;
77 int32 SizeY = 0;
78 int32 NumMips = 0;
79 int32 NumSlices = 0;
80 int32 MipBias = 0;
81};
82
84{
86 : SizeInBlocksX(0)
87 , SizeInBlocksY(0)
88 , BlockSizeX(0)
89 , BlockSizeY(0)
90 , bValid(false)
91 {}
92
93 // Clear the current source data and make it into a placeholder texture.
94 void InitAsPlaceholder();
95
97 bool IsValid() const { return bValid; }
98
99 // ImageWrapperModule is not used
101
102 void ReleaseMemory()
103 {
105
106 Blocks.Empty();
107 Layers.Empty();
108 bValid = false;
109 }
110
112
113 FString TextureFullName;
116 int32 SizeInBlocksX;
117 int32 SizeInBlocksY;
118 int32 BlockSizeX;
119 int32 BlockSizeY;
120 bool bValid;
121};
122
130{
139
141 FString TexturePathName;
142
147
148 // Metadata for the different fetches we could do. Stored to DerivedData once we know.
149 FTexturePlatformData::FTextureEncodeResultMetadata FetchFirstMetadata;
150 FTexturePlatformData::FTextureEncodeResultMetadata FetchOrBuildMetadata;
151
153 FString KeySuffix;
154
156 FTextureSourceData TextureData;
162 int64 BytesCached = 0;
165
167 bool bSucceeded = false;
169 bool bTriedAndFailed = false;
171 bool bLoadedFromDDC = false;
173 UE::Tasks::FCancellationToken CancellationToken;
174
175public:
176
184 const FTexturePlatformData::FTextureEncodeResultMetadata* InFetchFirstMetadata, // can be nullptr
185 const FTexturePlatformData::FTextureEncodeResultMetadata* InFetchOrBuildMetadata, // can be nullptr
187
189 void DoWork();
190
192 void Finalize();
193
195 int64 GetBytesCached() const
196 {
197 return BytesCached;
198 }
199
202 {
204 }
205
207 bool WasLoadedFromDDC() const
208 {
209 return bLoadedFromDDC;
210 }
211
212 FORCEINLINE TStatId GetStatId() const
213 {
215 }
216
217 void MarkAsCanceled()
218 {
219 if (FTextureCompilingManager::Get().IsAsyncCompilationCancelable())
220 {
221 CancellationToken.Cancel();
222 }
223 }
224};
225
227{
228 virtual ~FTextureAsyncCacheDerivedDataTask() = default;
229 virtual void Finalize(bool& bOutFoundInCache, uint64& OutProcessedByteCount) = 0;
230 virtual EQueuedWorkPriority GetPriority() const = 0;
231 virtual bool SetPriority(EQueuedWorkPriority QueuedWorkPriority) = 0;
232 virtual bool Cancel() = 0;
233 virtual void Wait() = 0;
234 virtual bool WaitWithTimeout(float TimeLimitSeconds) = 0;
235 virtual bool Poll() const = 0;
236};
237
238//
239// DDC1 async texture fetch/build task.
240//
241class FTextureAsyncCacheDerivedDataWorkerTask final : public FTextureAsyncCacheDerivedDataTask, public FAsyncTask<FTextureCacheDerivedDataWorker>
242{
243public:
251 const FTexturePlatformData::FTextureEncodeResultMetadata* InFetchFirstMetadata,
252 const FTexturePlatformData::FTextureEncodeResultMetadata* InFetchOrBuildMetadata,
254 )
258 InTexture,
264 )
265 , QueuedPool(InQueuedPool)
266 {
267 }
268
270 {
271 GetTask().Finalize();
272 bOutFoundInCache = GetTask().WasLoadedFromDDC();
273 OutProcessedByteCount = GetTask().GetBytesCached();
274 }
275
276 EQueuedWorkPriority GetPriority() const final
277 {
279 }
280
282 {
284 }
285
286 bool Cancel() final
287 {
289 }
290
291 void Wait() final
292 {
294 }
295
296 bool WaitWithTimeout(float TimeLimitSeconds) final
297 {
299 }
300
301 bool Poll() const final
302 {
304 }
305
306private:
307 FQueuedThreadPool* QueuedPool;
308};
309
310// Creates the DDC2 texture fetch/build task.
314 const FTextureBuildSettings* SettingsFetchFirst, // can be nullptr
316 const FTexturePlatformData::FTextureEncodeResultMetadata* FetchMetadata,
317 const FTexturePlatformData::FTextureEncodeResultMetadata* FetchOrBuildMetadata,
320
321// This needs to match the key generated by the build, otherwise the build will get continually kicked
322// by CachePlatformData().
323FTexturePlatformData::FStructuredDerivedDataKey CreateTextureDerivedDataKey(
326 const FTextureBuildSettings& Settings);
327
328#endif // WITH_EDITOR
#define FORCEINLINE
Definition AndroidPlatform.h:140
EGammaSpace
Definition Color.h:32
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
#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
#define TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
void Init()
Definition LockFreeList.h:4
EQueuedWorkPriority
Definition QueuedThreadPool.h:14
TextureMipGenSettings
Definition TextureDefines.h:129
@ NUM_INLINE_DERIVED_MIPS
Definition TextureDerivedDataTask.h:32
uint32_t uint32
Definition binka_ue_file_header.h:6
bool IsWorkDone() const
Definition AsyncWork.h:554
bool SetPriority(EQueuedWorkPriority QueuedWorkPriority)
Definition AsyncWork.h:571
void EnsureCompletion(bool bDoWorkOnThisThreadIfNotStarted=true, bool bIsLatencySensitive=false)
Definition AsyncWork.h:429
bool Reschedule(FQueuedThreadPool *InQueuedPool=GThreadPool, EQueuedWorkPriority InQueuedWorkPriority=EQueuedWorkPriority::Normal)
Definition AsyncWork.h:461
bool WaitCompletionWithTimeout(float TimeLimitSeconds)
Definition AsyncWork.h:508
EQueuedWorkPriority GetPriority() const
Definition AsyncWork.h:576
bool IsDone()
Definition AsyncWork.h:540
bool Cancel()
Definition AsyncWork.h:482
Definition AsyncWork.h:585
TTask & GetTask()
Definition AsyncWork.h:627
Definition AsyncWork.h:663
Definition QueuedThreadPool.h:105
Definition IImageWrapperModule.h:50
Definition ImageWrapper.Build.cs:6
Definition Array.h:670
Definition Task.h:570
void Cancel()
Definition Task.h:575
Definition Texture.h:1219
constexpr int32 NumMips
Definition DistanceFieldAtlas.h:44
Type
Definition ImageCore.h:57
@ Invalid
Definition ImageCore.h:68
Type
Definition TextureDefines.h:181
Definition DerivedData.cpp:40
UE_AUTORTFM_NOAUTORTFM FWaitState Wait(const void *Address, bool(*CanWait)(void *), void *CanWaitContext, void(*BeforeWait)(void *), void *BeforeWaitContext)
Definition ParkingLot.cpp:504
@ false
Definition radaudio_common.h:23
Definition Texture.h:839
Definition Texture.h:92
Definition LightweightStats.h:416