UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Texture.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"
8#include "UObject/Object.h"
9#include "Misc/Guid.h"
13#include "RenderCommandFence.h"
16#include "MaterialValueType.h"
19#include "ImageCore.h"
20#if WITH_EDITORONLY_DATA
21#include "Misc/TVariant.h"
24#endif
25
26#if WITH_EDITOR
27#include "Templates/DontCopy.h"
28#endif
29
30#include "Texture.generated.h"
31
32namespace FOodleDataCompression {enum class ECompressor : uint8; enum class ECompressionLevel : int8; }
33enum class EVTProducerPriority : uint8;
34
37class ITargetPlatform;
39class UAssetUserData;
42
43#if WITH_EDITORONLY_DATA
44namespace UE::DerivedData { struct FValueId; }
45#endif
46
47USTRUCT()
60
61USTRUCT()
63{
65
67
68 UPROPERTY(VisibleAnywhere, Category = TextureSource)
69 int32 BlockX;
70
71 UPROPERTY(VisibleAnywhere, Category = TextureSource)
72 int32 BlockY;
73
74 UPROPERTY(VisibleAnywhere, Category = TextureSource)
75 int32 SizeX;
76
77 UPROPERTY(VisibleAnywhere, Category = TextureSource)
78 int32 SizeY;
79
80 UPROPERTY(VisibleAnywhere, Category = TextureSource)
81 int32 NumSlices;
82
83 UPROPERTY(VisibleAnywhere, Category = TextureSource)
84 int32 NumMips;
85};
86
90USTRUCT()
92{
94
95
97
98 // should match ERawImageFormat::GetBytesPerPixel
99 ENGINE_API static int64 GetBytesPerPixel(ETextureSourceFormat Format);
100 // should match ERawImageFormat::IsHDR
102
103 enum class ELockState : uint8
104 {
105 None,
106 ReadOnly,
108 };
109
110#if WITH_EDITOR
111 // FwdDecl for member structs
112 struct FMipData;
113
118 const uint8** InDataPerBlock);
119
125
133 const uint8* NewData = NULL
134 );
135
144 );
145
155 ENGINE_API void Init(
161 const uint8* NewData = NULL
162 );
163
177 ENGINE_API void Init(const FImageView & Image);
178
188 ENGINE_API void Init(
195 );
196
207 );
208
214 );
215
226 );
227
244 );
245
262 );
263
265 ENGINE_API FTextureSource CopyTornOff() const;
266
268 ENGINE_API void Compress();
269
273
277 ENGINE_API const uint8* LockMipReadOnly(int32 BlockIndex, int32 LayerIndex, int32 MipIndex);
278
281 ENGINE_API uint8* LockMip(int32 BlockIndex, int32 LayerIndex, int32 MipIndex);
282
284 ENGINE_API void UnlockMip(int32 BlockIndex, int32 LayerIndex, int32 MipIndex);
285
287 ENGINE_API bool GetMipData(TArray64<uint8>& OutMipData, int32 BlockIndex, int32 LayerIndex, int32 MipIndex, class IImageWrapperModule* ImageWrapperModule = nullptr);
288
290 inline bool GetMipData(TArray64<uint8>& OutMipData, int32 MipIndex, class IImageWrapperModule* ImageWrapperModule = nullptr)
291 {
292 return GetMipData(OutMipData, 0, 0, MipIndex, ImageWrapperModule);
293 }
294
296 ENGINE_API bool GetMipImage(FImage & OutImage, int32 BlockIndex, int32 LayerIndex, int32 MipIndex);
297
299 inline bool GetMipImage(FImage & OutImage, int32 MipIndex)
300 {
301 return GetMipImage(OutImage, 0, 0, MipIndex);
302 }
303
306
309 ENGINE_API bool GetMipImageInfo(FImageInfo & OutImageInfo, int32 BlockIndex, int32 LayerIndex, int32 MipIndex) const;
310
313 ENGINE_API int64 CalcMipSize(int32 BlockIndex, int32 LayerIndex, int32 MipIndex) const;
314
316 ENGINE_API int64 CalcMipOffset(int32 BlockIndex, int32 LayerIndex, int32 MipIndex) const;
317
319 ENGINE_API int64 GetBytesPerPixel(int32 LayerIndex = 0) const;
320
322 UE_DEPRECATED(5.5,"Prefer AreAllBlocksPowerOfTwo, or IsBlockPowerOfTwo if you really only want one block")
323 bool IsPowerOfTwo(int32 BlockIndex = 0) const { return IsBlockPowerOfTwo(BlockIndex); }
324
328
330 ENGINE_API bool IsValid() const;
331
334
337
339 ENGINE_API FIntPoint GetSizeInBlocks() const;
340
341 /* Total number of pixels in the top mip level over all blocks+layers.
342 This is the pixel count of the source data, not the size of the built virtual canvas. */
344
346 ENGINE_API FString GetIdString() const;
347
350
353 inline ETextureSourceCompressionFormat GetSourceCompression() const { return CompressionFormat; }
354 inline bool IsSourceCompressed() const { return GetSourceCompression() != ETextureSourceCompressionFormat::TSCF_None; }
356
358 ENGINE_API EGammaSpace GetGammaSpace(int LayerIndex) const;
359
361 ENGINE_API ETextureClass GetTextureClass() const;
362
364 ENGINE_API int GetMippedNumSlices(int NumSlices,int MipIndex) const;
365
367 ENGINE_API void ExportCustomProperties(FOutputDevice& Out, uint32 Indent);
368 ENGINE_API void ImportCustomProperties(const TCHAR* SourceText, FFeedbackContext* Warn);
369
371 inline FGuid GetPersistentId() const { return BulkData.GetIdentifier(); }
374 ENGINE_API FGuid GetId() const;
375 inline int64 GetSizeX() const { return SizeX; }
376 inline int64 GetSizeY() const { return SizeY; }
377 inline int32 GetNumSlices() const { return NumSlices; }
378 inline int32 GetNumMips() const { return NumMips; }
379 inline int32 GetNumLayers() const { return NumLayers; }
380 inline int32 GetNumBlocks() const { return Blocks.Num() + 1; }
381 inline ETextureSourceFormat GetFormat(int32 LayerIndex = 0) const { return (LayerIndex == 0) ? Format : LayerFormat[LayerIndex]; }
382
383 // Warning: bLongLatCubemap is not correct. LongLat Cubemaps often have bLongLatCubemap == false
384 // bLongLatCubemap is sometimes set to true for cube arrays to disambiguate the case of 6 longlat cubemaps in an array
385 ENGINE_API bool IsCubeOrCubeArray() const;
386 ENGINE_API bool IsVolume() const;
387 ENGINE_API bool IsLongLatCubemap() const;
388 // returns volume depth, or 1 if not a volume
389 ENGINE_API int GetVolumeSizeZ() const;
390
391 //note: simple queries on BulkData are not taking the BulkDataLock , nor does BulkData internally mutex protect these
392 inline int64 GetSizeOnDisk() const { return BulkData.GetPayloadSize(); }
393 inline bool HasPayloadData() const { return BulkData.HasPayloadData(); } // this is the same as GetSizeOnDisk() != 0
394
396 ENGINE_API void Reset();
397
398 // Apply a visitor to the bulkdata : prefer GetBulkDataPayload() instead.
400
401 // GetBulkDataPayload returns the raw bulkdata memory in compressed form, not decompressed (use LockMip or GetMipData for that)
402 // the shared buffer should be treated as read only!
403 // to modify, make a copy and call Init() on the source with the changed copy
405
407 // broken function, did the opposite of its name (was == DoesPayloadNeedLoading, which is usually == HasPayloadData)
408 UE_DEPRECATED(5.5, "IsBulkDataLoaded was broken, do not use")
409 inline bool IsBulkDataLoaded() const { return true; }
410
411 UE_DEPRECATED(5.0, "There is no longer a need to call LoadBulkDataWithFileReader, FTextureSource::BulkData can now load the data on demand without it.")
412 inline bool LoadBulkDataWithFileReader() { return true; }
413
414 UE_DEPRECATED(5.5, "RemoveBulkData did not actually remove bulkdata; use ReleaseBulkDataCachedMemory if that's what you wanted")
415 inline void RemoveBulkData() { }
416
418 ENGINE_API void SetId(const FGuid& InId, bool bInGuidIsHash);
419
420 inline int64 CalcMipSize(int32 MipIndex) const { return CalcMipSize(0, 0, MipIndex); }
422 inline const uint8* LockMipReadOnly(int32 MipIndex) { return LockMipReadOnly(0, 0, MipIndex); }
424 inline uint8* LockMip(int32 MipIndex) { return LockMip(0, 0, MipIndex); }
425 inline void UnlockMip(int32 MipIndex) { UnlockMip(0, 0, MipIndex); }
426
427 inline void SetOwner(UTexture* InOwner) { Owner = InOwner; }
428
429 struct FMipAllocation
430 {
432 FMipAllocation() = default;
435
436 // Do not actually do anything for copy constructor or assignments, this is required for as long as
437 // we need to support the old bulkdata code path (although previously storing these allocations as
438 // raw pointers would allow it to be assigned, this would most likely cause a mismatch in lock counts,
439 // either in FTextureSource or the underlying bulkdata and was never actually safe)
441 FMipAllocation& operator =(const FMipAllocation&) { return *this; }
442
443 // We do allow rvalue assignment
446
447 ~FMipAllocation() = default;
448
450 void Reset();
451
453 bool IsNull() const { return ReadOnlyReference.IsNull(); }
454
456 int64 GetSize() const { return ReadOnlyReference.GetSize(); }
457
459 const FSharedBuffer& GetDataReadOnly() const { return ReadOnlyReference; }
460
461 UE_DEPRECATED(5.4, "Use GetDataReadWriteView instead")
462 uint8* GetDataReadWrite() { return (uint8*)GetDataReadWriteView().GetData(); }
463
466
469
470 private:
471 void CreateReadWriteBuffer(const void* SrcData, int64 DataLength);
472
473 struct FDeleterFree
474 {
475 void operator()(uint8* Ptr) const
476 {
477 if (Ptr)
478 {
479 FMemory::Free(Ptr);
480 }
481 }
482 };
483
486 };
487
489 struct FMipData
490 {
494 {
495 MipData = MoveTemp(Other.MipData);
496 }
497
498 ~FMipData() = default;
499
501 FMipData() = delete;
502 FMipData(const FMipData&) = delete;
503 FMipData& operator=(const FMipData&) = delete;
504 FMipData& operator=(FMipData&& Other) = delete;
505
507 ENGINE_API bool GetMipData(TArray64<uint8>& OutMipData, int32 BlockIndex, int32 LayerIndex, int32 MipIndex) const;
508
516 ENGINE_API FSharedBuffer GetMipData(int32 BlockIndex, int32 LayerIndex, int32 MipIndex) const;
518
519 // note: FImageView does not hold a ref on the FSharedBuffer memory it points at
520 // you must keep the FMipData around or hold a ref on the FSharedBuffer elsewhere
521 inline FImageView GetMipDataImageView(int32 BlockIndex, int32 LayerIndex, int32 MipIndex) const
522 {
525 return FImageView(Info,const_cast<void *>(Buffer.GetData()));
526 }
527
528 inline bool IsValid() const { return !MipData.IsNull(); }
529
530 inline void ResetData() { MipData.Reset(); }
531
532 inline FSharedBuffer GetData() const { return MipData; }
533
534 private:
535 // We only want to allow FTextureSource to create FMipData objects
536 friend struct FTextureSource;
537
539
541 FSharedBuffer MipData;
542 };
543
550 struct FMipLock
551 {
552 // constructor locks the mip (can fail, check IsValid())
555
556 // move constructor
558
559 // destructor unlocks
561
562 ELockState LockState;
565 int32 LayerIndex;
566 int32 MipIndex;
568
569 const void * GetRawData() const
570 {
571 check( LockState != ELockState::None );
572 return Image.RawData;
573 }
574 void * GetMutableData() const
575 {
576 check( LockState == ELockState::ReadWrite );
577 return Image.RawData;
578 }
579 int64 GetDataSize() const { return Image.GetImageSizeBytes(); }
580
581 bool IsValid() const
582 {
583 // two criteria should be the same :
584 bool bNotNull = Image.RawData != nullptr;
585 bool bNotNone = LockState != ELockState::None;
586 check( bNotNull == bNotNone );
587 return bNotNull;
588 }
589
590 private:
591
592 // no copying or default construct
593 FMipLock() = delete;
594 FMipLock(const FMipLock&) = delete;
595 FMipLock& operator=(const FMipLock&) = delete;
596 FMipLock& operator=(FMipLock&& Other) = delete;
597 };
598#endif // WITH_EDITOR
599
600private:
602 friend class UTexture;
603 friend class UTexture2D;
604 friend class UTextureCube;
605 friend class UVolumeTexture;
606 friend class UTexture2DArray;
607 friend class UTextureCubeArray;
608
609#if WITH_EDITOR
625 /* For debugging : */
626 FString TornOffOwnerName;
627#endif
630
632 uint32 NumLockedMips;
633
635 ELockState LockState;
636
637 void CheckTextureIsUnlocked(const TCHAR* DebugMessage);
638
639#if WITH_EDITOR
642
643 // Internal implementation for locking the mip data, called by LockMipReadOnly or LockMip.
645
647 // ImageWrapperModule is not used
655
656 /* total size of source data in bytes */
657 int64 CalcTotalSize() const;
658 /* size of block in bytes, over all layers */
660 int64 CalcLayerSize(int32 BlockIndex, int32 LayerIndex) const;
662 int64 CalcLayerSize(const FTextureSourceBlock& Block, int32 LayerIndex) const;
663
664 void InitLayeredImpl(
671
676
678
679public:
680 // UpdateChannelLinearMinMax runs FImageCore::ComputeChannelLinearMinMax on all blocks and layers (but only mip0), returns false
681 // if the source was unable to be locked and leaves the channel minmax as unknown.
682 // Compute just gets the values and leaves the cached minax in the Source untouched.
684 ENGINE_API bool ComputeChannelLinearMinMax(int32 InLayerIndex, FLinearColor& OutMinColor, FLinearColor& OutMaxColor) const;
685
689 ENGINE_API bool HasLayerColorInfo() const;
690
691 // As per UpdateChannelLinearMinMax(), except acts on incoming new data rather than locking existing mips.
692 // InNewTextureData must be uncompressed
693 // UpdateChannelMinMaxFromIncomingTextureData does not use the BulkData or CompressionFormat on the TextureSource
694 // but it does use the dimensions/blocks/etc. they must be set before calling this.
695 // returns true/false for success/failure.
696 // failure may occur if the size of InNewTextureData does not match the dimensions set in the Texturesource
698
701 ENGINE_API void UseHashAsGuid();
702
703 UE_DEPRECATED(5.5, "Remove call to ReleaseSourceMemory.")
704 inline void ReleaseSourceMemory() { }
705
706 UE_DEPRECATED(5.5, "Remove call to HasHadBulkDataCleared.")
707 inline bool HasHadBulkDataCleared() const { return false; }
708#endif // WITH_EDITOR
709
710private:
711
712#if WITH_EDITORONLY_DATA
716 UPROPERTY(VisibleAnywhere, Category=TextureSource)
717 FGuid Id;
718
720 UPROPERTY(VisibleAnywhere, Category = TextureSource)
722
723 UPROPERTY(VisibleAnywhere, Category = TextureSource)
725
727 UPROPERTY(VisibleAnywhere, Category=TextureSource)
728 int32 SizeX;
729
731 UPROPERTY(VisibleAnywhere, Category=TextureSource)
732 int32 SizeY;
733
735 UPROPERTY(VisibleAnywhere, Category=TextureSource)
736 int32 NumSlices;
737
739 UPROPERTY(VisibleAnywhere, Category=TextureSource)
741
743 UPROPERTY(VisibleAnywhere, Category = TextureSource)
744 int32 NumLayers;
745
749 UPROPERTY()
751
757 UPROPERTY(VisibleAnywhere, Category = TextureSource)
758 bool bLongLatCubemap;
759
761 UPROPERTY(VisibleAnywhere, Category = TextureSource)
763
765 UPROPERTY(VisibleAnywhere, Category=TextureSource)
766 bool bGuidIsHash;
767
770 UPROPERTY(VisibleAnywhere, Category=TextureSource)
772
774 UPROPERTY(VisibleAnywhere, Category=TextureSource)
776
778 UPROPERTY(VisibleAnywhere, Category = TextureSource)
780
785 UPROPERTY(VisibleAnywhere, Category = TextureSource)
787
793 UPROPERTY()
795
796#endif // WITH_EDITORONLY_DATA
797};
798
804{
809
814
815 inline bool operator == (FOptTexturePlatformData const& RHS) const
816 {
817 return ExtData == RHS.ExtData
819 }
820
821 inline bool operator != (FOptTexturePlatformData const& RHS) const
822 {
823 return !(*this == RHS);
824 }
825
827 {
828 Ar << Data.ExtData;
829 Ar << Data.NumMipsInTail;
830 return Ar;
831 }
832};
833
837USTRUCT()
839{
841
842
843 int32 SizeX;
845 int32 SizeY;
847 uint32 PackedData;
849 EPixelFormat PixelFormat;
855
858
859#if WITH_EDITORONLY_DATA
860
861 // When in the editor we have some data that is stored in the derived data
862 // that we don't want to save in the runtime cooked data:
863 // 1. bSourceMipsAlphaDetected - this is part of the calculation for whether to choose
864 // e.g. BC1 or BC3.
865 // 2. Interim hash data for cook diff tags - this is used for diff tracking for hunting down
866 // determinism issues.
867 // We only have this data if the textures were rebuilt after adding it (I didn't invalidate the ddc for this),
868 // hence bSourceMipsAlphaDetectedValid. The Hashes are zero if the data isn't present.
869 uint64 PreEncodeMipsHash=0; // XxHash64
870
873
874 // Stores information about how we generated this encoded texture.
875 // Mostly relevant to Oodle, however notably does actually tell
876 // you _which_ encoder was used.
878 {
879 // Returned from ITextureFormat
880 FName Encoder;
881
882 // This is the format the texture will be using on the device so that when
883 // we decode for viewing we know what it originally was. In some cases this can only be known
884 // if we have source alpha information so it might remain PF_Unknown even when bIsValid is true.
886
887 // This struct is not always filled out, allow us to check for invalid data.
888 bool bIsValid = false;
889
890 // If this is false, the remaining fields are invalid (as encode speed governs
891 // the various Oodle specific values right now.)
892 bool bSupportsEncodeSpeed = false;
893
894 // If true, then the encoding settings were overridden in the texture editor
895 // for encoding experimentation, and thus RDOSource and EncodeSpeed should
896 // be ignored.
897 bool bWasEditorCustomEncoding = false;
898
899 enum class OodleRDOSource : uint8
900 {
901 Default, // We defaulted back to the project settings
902 LODGroup, // We used the LCA off the LOD group to generate a lambda
903 Texture, // We used the LCA off the texture to generate a lambda.
904 };
905
906 OodleRDOSource RDOSource = OodleRDOSource::Default;
907
908 // The resulting RDO lambda, 0 means no RDO.
909 uint8 OodleRDO = 0;
910
911 // enum ETextureEncodeEffort
912 uint8 OodleEncodeEffort = 0;
913
914 // enum ETextureUniversalTiling
915 uint8 OodleUniversalTiling = 0;
916
917 // Which encode speed we ended up using. Must be either ETextureEncodeSpeed::Final or ETextureEncodeSpeed::Fast.
918 uint8 EncodeSpeed = 0;
919 };
920
922
924 {
925 FIoHash TilingBuildDefinitionKey; // All zeroes if not shared linear tiling
926 FIoHash DeTilingBuildDefinitionKey; // All zeroes if not tiled.
927 FIoHash DecodeBuildDefinitionKey; // All zeroes if not decoding for pc.
929 FGuid SourceGuid;
931
932 bool operator==(const FStructuredDerivedDataKey& Other) const
933 {
934 return DecodeBuildDefinitionKey == Other.DecodeBuildDefinitionKey &&
935 TilingBuildDefinitionKey == Other.TilingBuildDefinitionKey &&
936 DeTilingBuildDefinitionKey == Other.DeTilingBuildDefinitionKey &&
937 BuildDefinitionKey == Other.BuildDefinitionKey &&
938 SourceGuid == Other.SourceGuid &&
939 CompositeSourceGuid == Other.CompositeSourceGuid;
940 }
941
943 {
944 return DecodeBuildDefinitionKey != Other.DecodeBuildDefinitionKey ||
945 DeTilingBuildDefinitionKey != Other.DeTilingBuildDefinitionKey ||
946 TilingBuildDefinitionKey != Other.TilingBuildDefinitionKey ||
947 BuildDefinitionKey != Other.BuildDefinitionKey ||
948 SourceGuid != Other.SourceGuid ||
949 CompositeSourceGuid != Other.CompositeSourceGuid;
950 }
951 };
952
962
965
966#endif
967
970
973
974private:
975 static constexpr uint32 BitMask_CubeMap = 1u << 31u;
976 static constexpr uint32 BitMask_HasOptData = 1u << 30u;
977 static constexpr uint32 BitMask_HasCpuCopy = 1u << 29u;
978 static constexpr uint32 BitMask_NumSlices = BitMask_HasCpuCopy - 1u;
979
980public:
982 bool IsReadyForAsyncPostLoad() const;
983
993 bool TryLoadMips(int32 FirstMipToLoad, void** OutMipData, FStringView DebugContext);
994 bool TryLoadMipsWithSizes(int32 FirstMipToLoad, void** OutMipData, int64 * OutMipSize, FStringView DebugContext);
995
997 void Serialize(FArchive& Ar, class UTexture* Owner);
998
999#if WITH_EDITORONLY_DATA
1000 FString GetDerivedDataMipKeyString(int32 MipIndex, const FTexture2DMipMap& Mip) const;
1001 static UE::DerivedData::FValueId MakeMipId(int32 MipIndex);
1002#endif // WITH_EDITORONLY_DATA
1003
1012 void SerializeCooked(FArchive& Ar, class UTexture* Owner, bool bStreamable, const bool bSerializeMipData);
1013
1015 {
1016 PackedData = (InNumSlices & BitMask_NumSlices) | (bInCubeMap ? BitMask_CubeMap : 0) | (bInHasOptData ? BitMask_HasOptData : 0) | (bInHasCpuCopy ? BitMask_HasCpuCopy : 0);
1017 }
1018
1019 inline bool GetHasOptData() const
1020 {
1021 return (PackedData & BitMask_HasOptData) == BitMask_HasOptData;
1022 }
1023
1025 {
1026 // Set the opt data flag to true if the specified data is non-default.
1027 bool bHasOptData = Data != FOptTexturePlatformData();
1028 PackedData = (bHasOptData ? BitMask_HasOptData : 0) | (PackedData & (~BitMask_HasOptData));
1029
1030 OptData = Data;
1031 }
1032
1033 inline bool GetHasCpuCopy() const
1034 {
1035 return (PackedData & BitMask_HasCpuCopy) == BitMask_HasCpuCopy;
1036 }
1037
1039 {
1040 PackedData = (bInHasCpuCopy ? BitMask_HasCpuCopy : 0) | (PackedData & (~BitMask_HasCpuCopy));
1041 }
1042
1043 inline bool IsCubemap() const
1044 {
1045 return (PackedData & BitMask_CubeMap) == BitMask_CubeMap;
1046 }
1047
1048 inline void SetIsCubemap(bool bCubemap)
1049 {
1050 PackedData = (bCubemap ? BitMask_CubeMap : 0) | (PackedData & (~BitMask_CubeMap));
1051 }
1052
1053 inline int32 GetNumSlices() const
1054 {
1055 return (int32)(PackedData & BitMask_NumSlices);
1056 }
1057
1058 inline void SetNumSlices(int32 NumSlices)
1059 {
1060 PackedData = (NumSlices & BitMask_NumSlices) | (PackedData & (~BitMask_NumSlices));
1061 }
1062
1064 {
1065 return OptData.NumMipsInTail;
1066 }
1067
1068 inline int32 GetExtData() const
1069 {
1070 return OptData.ExtData;
1071 }
1072
1073#if WITH_EDITOR
1074 // Clears the data such that a new Cache() call can load new data in to the structure.
1075 void Reset();
1076
1077 bool IsAsyncWorkComplete() const;
1078
1079 // Compresses the texture using the given compressor and adds the result to the DDC.
1080 // This might not be synchronous, and might be called from a worker thread!
1081 //
1082 // If Compressor is 0, uses the default texture compressor module. Must be nonzero
1083 // if called from a worker thread.
1084 //
1085 // InFlags are ETextureCacheFlags.
1086 // InSettingsPerLayerFetchFirst can be nullptr - if not, then the caceh will check if
1087 // the corresponding texture exists in the DDC before trying the FetchOrBuild settings.
1088 // FetchFirst is ignored if forcerebuild is passed as a flag.
1089 // InSettingsPerLayerFetchOrBuild is required. If a texture matching the settings exists
1090 // in the ddc, it is used, otherwise it is built.
1091 void Cache(
1092 class UTexture& InTexture,
1095 const FTexturePlatformData::FTextureEncodeResultMetadata* OutResultMetadataPerLayerFetchFirst,
1096 const FTexturePlatformData::FTextureEncodeResultMetadata* OutResultMetadataPerLayerFetchOrBuild,
1099 void FinishCache();
1100 bool TryCancelCache();
1101 void CancelCache();
1111 UE_DEPRECATED(5.0, "Use AreDerivedMipsAvailable with the context instead.")
1113 UE_DEPRECATED(5.0, "Use AreDerivedVTChunksAvailable with the context instead.")
1114 bool AreDerivedVTChunksAvailable() const;
1115#endif
1116
1118 int32 GetNumNonStreamingMips(bool bIsStreamingPossible) const;
1120 int32 GetNumNonOptionalMips() const;
1122 bool CanBeLoaded() const;
1123
1124 // Only because we don't want to expose FVirtualTextureBuiltData
1125 ENGINE_API int32 GetNumVTMips() const;
1126 ENGINE_API EPixelFormat GetLayerPixelFormat(uint32 LayerIndex) const;
1127
1129 ENGINE_API int64 GetPayloadSize(int32 MipBias) const;
1130
1131private:
1132
1133 bool CanUseCookedDataPath() const;
1134};
1135
1139USTRUCT()
1141{
1143
1145 : CompressionSettings(TC_Default)
1146 , CompressionNoAlpha(false)
1147 , CompressionForceAlpha(false)
1148 , CompressionNone(false)
1149 , CompressionYCoCg(false)
1150 , SRGB(false)
1151 {}
1152
1153 bool operator==(const FTextureFormatSettings& other) const = default;
1154
1155 UPROPERTY()
1157
1158 UPROPERTY()
1159 uint8 CompressionNoAlpha : 1;
1160
1161 UPROPERTY()
1162 uint8 CompressionForceAlpha : 1;
1163
1164 UPROPERTY()
1165 uint8 CompressionNone : 1;
1166
1167 UPROPERTY()
1168 uint8 CompressionYCoCg : 1;
1169
1170 UPROPERTY()
1172};
1173
1174
1175USTRUCT(BlueprintType)
1177{
1179
1180
1182
1184 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ColorManagement)
1185 ETextureSourceEncoding EncodingOverride;
1186
1188 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ColorManagement)
1190
1192 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ColorManagement, meta = (EditCondition = "ColorSpace == ETextureColorSpace::TCS_Custom"))
1193 FVector2D RedChromaticityCoordinate;
1194
1196 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ColorManagement, meta = (EditCondition = "ColorSpace == ETextureColorSpace::TCS_Custom"))
1197 FVector2D GreenChromaticityCoordinate;
1198
1200 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ColorManagement, meta = (EditCondition = "ColorSpace == ETextureColorSpace::TCS_Custom"))
1201 FVector2D BlueChromaticityCoordinate;
1202
1204 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ColorManagement, meta = (EditCondition = "ColorSpace == ETextureColorSpace::TCS_Custom"))
1205 FVector2D WhiteChromaticityCoordinate;
1206
1208 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ColorManagement)
1209 ETextureChromaticAdaptationMethod ChromaticAdaptationMethod;
1210
1211#if WITH_EDITORONLY_DATA
1214#endif
1215};
1216
1217UCLASS(abstract, MinimalAPI, BlueprintType)
1219{
1221
1222 /*--------------------------------------------------------------------------
1223 Editor only properties used to build the runtime texture data.
1224 --------------------------------------------------------------------------*/
1225
1226#if WITH_EDITORONLY_DATA
1227 /* Dynamic textures will have ! Source.IsValid() ;
1228 Also in UEFN , Textures from the cooked-only texture library. Always check Source.IsValid before using Source. */
1229 UPROPERTY()
1230 FTextureSource Source;
1231#endif
1232
1233private:
1235 UPROPERTY()
1237
1238public:
1239#if WITH_EDITORONLY_DATA
1240 UPROPERTY()
1242
1243 UPROPERTY(VisibleAnywhere, Instanced, Category=ImportSettings)
1245
1246public:
1247
1249 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(DisplayName = "Brightness"))
1250 float AdjustBrightness;
1251
1253 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(DisplayName = "Brightness Curve"))
1254 float AdjustBrightnessCurve;
1255
1257 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(DisplayName = "Vibrance", ClampMin = "0.0", ClampMax = "1.0"))
1258 float AdjustVibrance;
1259
1261 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(DisplayName = "Saturation"))
1262 float AdjustSaturation;
1263
1265 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(DisplayName = "RGBCurve"))
1266 float AdjustRGBCurve;
1267
1269 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(DisplayName = "Hue", ClampMin = "0.0", ClampMax = "360.0"))
1270 float AdjustHue;
1271
1273 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(DisplayName = "Min Alpha"))
1274 float AdjustMinAlpha;
1275
1277 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(DisplayName = "Max Alpha"))
1278 float AdjustMaxAlpha;
1279
1281 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Compression, meta=(DisplayName="Compress Without Alpha"))
1282 uint32 CompressionNoAlpha:1;
1283
1285 UPROPERTY()
1286 uint32 CompressionForceAlpha:1;
1287
1289 UPROPERTY()
1290 uint32 CompressionNone:1;
1291
1293 UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient, SkipSerialization, Category=Compression, meta=(NoResetToDefault), meta=(DisplayName="Editor Show Final Encode"))
1295
1297 UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient, SkipSerialization, Category=Compression, meta=(NoResetToDefault), meta=(DisplayName="Editor Defer Compression"))
1299
1304 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Compression, AdvancedDisplay)
1305 TEnumAsByte<ETextureLossyCompressionAmount> LossyCompressionAmount;
1306
1308 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Compression, AdvancedDisplay, meta=(NoResetToDefault))
1310
1312 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Compression, meta=(DisplayName="Maximum Texture Size", ClampMin = "0.0"), AdvancedDisplay)
1313 int32 MaxTextureSize;
1314
1316 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Compression, meta = (DisplayName = "ASTC Compression Quality"), AdvancedDisplay)
1318
1320 UPROPERTY(EditAnywhere, Category=Compression, meta=(NoResetToDefault), meta=(DisplayName = "Compression Cache ID"), AdvancedDisplay)
1322
1324 UPROPERTY()
1326
1328 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, AdvancedDisplay)
1329 bool bDoScaleMipsForAlphaCoverage = false;
1330
1332 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Texture, meta=(ClampMin = "0", ClampMax = "1.0", EditCondition="bDoScaleMipsForAlphaCoverage"), AdvancedDisplay)
1334
1338 // for GUI hover text :
1340 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, meta=(DisplayName = "Use Improved Image Processing"), AdvancedDisplay)
1341 bool bUseNewMipFilter = false;
1342
1344 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LevelOfDetail, AdvancedDisplay)
1346
1348 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, AdvancedDisplay)
1350
1352 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, meta = (DisplayName = "Padding and Resizing"))
1354
1356 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, meta = (EditCondition = "(PowerOfTwoMode == ETexturePowerOfTwoSetting::PadToPowerOfTwo || PowerOfTwoMode == ETexturePowerOfTwoSetting::PadToSquarePowerOfTwo) && !bPadWithBorderColor", EditConditionHides))
1358
1360 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, meta = (EditCondition = "PowerOfTwoMode == ETexturePowerOfTwoSetting::PadToPowerOfTwo || PowerOfTwoMode == ETexturePowerOfTwoSetting::PadToSquarePowerOfTwo", EditConditionHides))
1362
1364 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Texture, meta = (EditCondition = "PowerOfTwoMode == ETexturePowerOfTwoSetting::ResizeToSpecificResolution", EditConditionHides))
1366
1368 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Texture, meta = (EditCondition = "PowerOfTwoMode == ETexturePowerOfTwoSetting::ResizeToSpecificResolution", EditConditionHides))
1370
1372 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments)
1373 bool bChromaKeyTexture;
1374
1376 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(EditCondition="bChromaKeyTexture", ClampMin="0"))
1377 float ChromaKeyThreshold;
1378
1380 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Adjustments, meta=(EditCondition="bChromaKeyTexture"))
1382
1384 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LevelOfDetail)
1386
1392 UE_DEPRECATED(5.3, "Use GetCompositeTexture() and SetCompositeTexture() instead.")
1393 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Compositing, meta = (AllowPrivateAccess, RequiredAssetDataTags = "IsSourceValid=True"), Setter = SetCompositeTexture, Getter = GetCompositeTexture)
1395
1396private:
1400 class UTexture* KnownCompositeTexture = nullptr;
1401
1405
1406public:
1408 {
1413 }
1414
1416 {
1418 // This should never happen and is a last resort, we should have caught the property overwrite well before we reach this code
1419 // but this can happen from legacy code that use reflection to set the property without using the new _InContainer functions
1420 // which will bypass the setter we put in place.
1422 {
1424 }
1425 return CompositeTexture;
1427 }
1428
1429 /* defines how the CompositeTexture is applied, e.g. CTM_RoughnessFromNormalAlpha */
1430 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Compositing, AdvancedDisplay)
1432
1437 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Compositing, AdvancedDisplay)
1438 float CompositePower;
1439
1444 UPROPERTY()
1446
1447#endif // WITH_EDITORONLY_DATA
1448
1449 /*--------------------------------------------------------------------------
1450 Properties needed at runtime below.
1451 --------------------------------------------------------------------------*/
1452
1453 /*
1454 * Level scope index of this texture. It is used to reduce the amount of lookup to map a texture to its level index.
1455 * Useful when building texture streaming data, as well as when filling the texture streamer with precomputed data.
1456 * It relates to FStreamingTextureBuildInfo::TextureLevelIndex and also the index in ULevel::StreamingTextureGuids.
1457 * Default value of -1, indicates that the texture has an unknown index (not yet processed). At level load time,
1458 * -2 is also used to indicate that the texture has been processed but no entry were found in the level table.
1459 * After any of these processes, the LevelIndex is reset to INDEX_NONE. Making it ready for the next level task.
1460 */
1461 UPROPERTY(transient, duplicatetransient, NonTransactional)
1463
1465 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LevelOfDetail, meta=(DisplayName="LOD Bias"), AssetRegistrySearchable)
1467
1469 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Compression, AssetRegistrySearchable)
1471
1473 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, AssetRegistrySearchable, AdvancedDisplay)
1475
1477 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Texture, AssetRegistrySearchable, AdvancedDisplay)
1479
1481 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Texture, AdvancedDisplay, meta=(EditCondition = "bUseVirtualTextureStreamingPriority"))
1483
1489 UPROPERTY(EditAnywhere, Category = Texture, AdvancedDisplay, meta=(EditCondition = "VirtualTextureStreaming"))
1491
1493 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Compression, AdvancedDisplay)
1495
1497 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Compression, meta = (DisplayName = "Preserve Extremes When Compressing With Oodle"), AdvancedDisplay)
1499
1501 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=LevelOfDetail, meta=(DisplayName="Texture Group"), AssetRegistrySearchable)
1503
1507 UFUNCTION()
1508 virtual bool AreDownscalePropertiesEditable() const { return false; }
1509
1515 UPROPERTY(EditAnywhere, Category=LevelOfDetail, AdvancedDisplay, meta=(ClampMin="0.0", ClampMax="8.0", EditCondition=AreDownscalePropertiesEditable))
1517
1519 UPROPERTY(EditAnywhere, Category=LevelOfDetail, AdvancedDisplay, meta=(EditCondition=AreDownscalePropertiesEditable))
1521
1526 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, meta=(DisplayName="Availability"), AssetRegistrySearchable)
1528
1530 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, meta=(DisplayName="sRGB"), AssetRegistrySearchable)
1532
1533#if WITH_EDITORONLY_DATA
1534 /* Normalize colors in Normal Maps after mip generation for better and sharper quality; recommended on if not required to match legacy behavior. */
1535 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, meta=(DisplayName="Normalize after making mips", EditCondition="CompressionSettings==1"), AdvancedDisplay)
1537
1539 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Texture, meta=(DisplayName="sRGB Use Legacy Gamma", EditCondition="SRGB"), AdvancedDisplay)
1541
1543 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Texture, AdvancedDisplay)
1545
1546 /* Store the FUE5MainStreamObjectVersion of the Texture uasset loaded for debugging (== LatestVersion if not loaded) */
1548
1550 uint8 bIsImporting : 1;
1551
1554
1555 // When we are open in an asset editor, we have a pointer to a custom encoding
1556 // object which can optionally cause us to do something other than Fast/Final encode settings.
1558
1559 // Override the platform to cache for, instead of using "running plaform". NAME_None to use default editor platform.
1561#endif // WITH_EDITORONLY_DATA
1562
1564 UPROPERTY()
1566
1568 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Texture, AssetRegistrySearchable, AdvancedDisplay)
1570
1572 UPROPERTY(EditAnywhere, Category = LevelOfDetail, AdvancedDisplay, meta=(EditCondition = "VirtualTextureStreaming", InlineEditConditionToggle))
1574
1575#if WITH_EDITOR
1576 UFUNCTION(BlueprintCallable, Category = Texture)
1578#endif
1579
1581 UPROPERTY()
1583
1591
1597 UFUNCTION(BlueprintCallable, meta = (DisplayName = "GetMemorySize"), Category = "Rendering|Texture")
1599
1606 UFUNCTION(BlueprintCallable, BlueprintPure=false, meta = (DisplayName = "GetTextureSourceDiskAndMemorySize"), Category = "Rendering|Texture")
1608
1615 UFUNCTION(BlueprintCallable, BlueprintPure=false, Category = "Rendering|Texture")
1617
1622 UFUNCTION(BlueprintCallable, meta = (DisplayName = "GetTextureSourceIdString"), Category = "Rendering|Texture")
1624
1625private:
1628 uint8 bAsyncResourceReleaseHasBeenStarted : 1;
1629
1630protected:
1632 UPROPERTY(EditAnywhere, AdvancedDisplay, Instanced, Category = Texture)
1634
1635public:
1636#if WITH_EDITOR
1641#endif
1642
1643private:
1645 class FTextureResource* PrivateResource;
1650 class FTextureResource* PrivateResourceRenderThread;
1651
1652public:
1654 ENGINE_API virtual ~UTexture();
1655
1657 ENGINE_API void SetResource(FTextureResource* Resource);
1658
1660 ENGINE_API FTextureResource* GetResource();
1661
1663 ENGINE_API const FTextureResource* GetResource() const;
1664
1667
1670
1675
1676 ENGINE_API virtual void ExportCustomProperties(FOutputDevice& Out, uint32 Indent) override;
1677 ENGINE_API virtual void ImportCustomProperties(const TCHAR* SourceText, FFeedbackContext* Warn) override;
1678 ENGINE_API virtual void PostEditImport() override;
1679
1681 virtual ETextureClass GetTextureClass() const PURE_VIRTUAL(UTexture::GetTextureClass, return ETextureClass::Invalid; );
1682
1687
1694 virtual void UpdateResource() { UpdateResourceWithParams(EUpdateResourceFlags::None); }
1695
1697 {
1698 None =0,
1699
1700 /* Forces the derived data for the texture to completely rebuild. Only applies to editor builds */
1701 ForceRebuild =0x1,
1702 /* Forces any derived data fetch/rebuild to run on the calling thread. */
1703 Synchronous =0x2
1704 };
1705
1711 ENGINE_API virtual void UpdateResourceWithParams(EUpdateResourceFlags InFlags);
1712
1716 virtual class FTextureResource* CreateResource() PURE_VIRTUAL(UTexture::CreateResource,return NULL;);
1717
1719 UE_DEPRECATED(5.2, "UpdateCachedLODBias does nothing, remove call")
1720 void UpdateCachedLODBias()
1721 {
1722 // no longer cached, now does nothing
1723 }
1724
1725 int32 GetCachedLODBias() const override
1726 {
1727 // this is the combined LOD Bias with cinematic bias
1728 return CalculateLODBias(true);
1729 }
1730
1737 ENGINE_API int32 CalculateLODBias(bool bWithCinematicMipBias) const;
1738
1742 virtual EMaterialValueType GetMaterialType() const PURE_VIRTUAL(UTexture::GetMaterialType,return MCT_Texture;);
1743
1750 virtual bool IsCurrentlyVirtualTextured() const
1751 {
1752 return false;
1753 }
1754
1756 UFUNCTION(BlueprintCallable, Category = Texture)
1757 ENGINE_API ETextureStreamingMethod GetTextureStreamingMethod() const;
1758
1760 ENGINE_API virtual void GetVirtualTextureBuildSettings(struct FVirtualTextureBuildSettings& OutSettings) const;
1761
1762#if WITH_EDITORONLY_DATA
1766#endif
1767
1770 ENGINE_API static bool IsVirtualTexturingEnabled( const ITargetPlatformSettings * TargetPlatform = nullptr );
1771
1778
1779 void CleanupCachedRunningPlatformData();
1780
1785 ENGINE_API void GetBuiltTextureSize( const ITargetPlatform* TargetPlatform , int32 & OutSizeX, int32 & OutSizeY, int32 & OutSizeZ ) const;
1787
1788 void GetBuiltTextureSize( const ITargetPlatform* TargetPlatform , int32 & OutSizeX, int32 & OutSizeY) const
1789 {
1791 GetBuiltTextureSize(TargetPlatform,OutSizeX,OutSizeY,IgnoredSizeZ);
1792 }
1798
1803 UFUNCTION(BlueprintCallable, meta = (DisplayName = "GetBuiltTextureSize"), Category = "Rendering|Texture")
1804 FVector3f Blueprint_GetBuiltTextureSize();
1805
1809 ENGINE_API void SerializeCookedPlatformData(class FArchive& Ar, const bool bSerializeMipData = true);
1810
1811 //~ Begin IInterface_AssetUserData Interface
1812 ENGINE_API virtual void AddAssetUserData(UAssetUserData* InUserData) override;
1815 ENGINE_API virtual const TArray<UAssetUserData*>* GetAssetUserDataArray() const override;
1816 //~ End IInterface_AssetUserData Interface
1817
1818#if WITH_EDITOR
1829 void CachePlatformData(bool bAsyncCache = false, bool bAllowAsyncBuild = false, bool bAllowAsyncLoading = false, class ITextureCompressorModule* Compressor = nullptr, bool bForceRebuild = false);
1830
1831 /* Returns if it is possible to build this texture for a given TargetPlatform (or any).
1832 This supercedes checking Source.IsValid()
1833 When this returns false, CachePlatformData will not attempt to build or cache the PlatformData.
1834 */
1835 bool CanBuildPlatformData(const ITargetPlatformSettings * TargetPlatform = nullptr) const;
1836
1840 ENGINE_API virtual void BeginCacheForCookedPlatformData( const ITargetPlatform* TargetPlatform ) override;
1841
1847 ENGINE_API virtual bool IsCachedCookedPlatformDataLoaded( const ITargetPlatform* TargetPlatform ) override;
1848
1854 ENGINE_API virtual void ClearCachedCookedPlatformData( const ITargetPlatform* TargetPlatform ) override;
1855
1861 ENGINE_API virtual void ClearAllCachedCookedPlatformData() override;
1862
1866 ENGINE_API virtual bool IsDefaultTexture() const;
1867
1872
1876 ENGINE_API bool IsAsyncCacheComplete() const;
1877
1887
1893
1897 UE_DEPRECATED(5.1,"Use GetBuildRequiredMemoryEstimate instead")
1899
1904
1910
1916
1918
1920
1923
1924 /* Change the Oodle Texture Sdk Version used to encode this texture to latest.
1925 * You should do this any time the texture is modified, such as on reimport, since the bits are changing anyway.
1926 */
1928
1935
1942#endif // WITH_EDITOR
1943
1945 {
1946 // note: does not validate that the Format respects gamma (TextureSource::GetGammaSpace does)
1947
1948 #if WITH_EDITORONLY_DATA
1949 // Pow22 only affects texture *Source* encoding of import
1950 // PlatformData is always sRGB even if bUseLegacyGamma was on
1951 if ( SRGB && bUseLegacyGamma )
1952 {
1953 return EGammaSpace::Pow22;
1954 }
1955 #endif
1956
1958 }
1959
1961 virtual float GetSurfaceWidth() const PURE_VIRTUAL(UTexture::GetSurfaceWidth,return 0;);
1962
1964 virtual float GetSurfaceHeight() const PURE_VIRTUAL(UTexture::GetSurfaceHeight,return 0;);
1965
1967 virtual float GetSurfaceDepth() const PURE_VIRTUAL(UTexture::GetSurfaceDepth, return 0;);
1968
1970 virtual uint32 GetSurfaceArraySize() const PURE_VIRTUAL(UTexture::GetSurfaceArraySize, return 0;);
1971
1972 virtual TextureAddress GetTextureAddressX() const { return TA_Wrap; }
1973 virtual TextureAddress GetTextureAddressY() const { return TA_Wrap; }
1974 virtual TextureAddress GetTextureAddressZ() const { return TA_Wrap; }
1975
1980 {
1981 return FGuid();
1982 }
1983
1984#if WITH_EDITOR
1985 //~ Begin AsyncCompilation Interface
1986 virtual bool IsCompiling() const override { return IsDefaultTexture(); }
1987 //~ End AsyncCompilation Interface
1988
1989 // if texture is currently in async build action or queue, block until it is done
1990 // note: Modify() and PreEditChange() do this. You should usually be using PreEdit/PostEdit and not calling this directly.
1991 ENGINE_API virtual void BlockOnAnyAsyncBuild();
1992
1993 //~ Begin UObject Interface.
1994 ENGINE_API virtual bool Modify(bool bAlwaysMarkDirty = true) override;
1995 ENGINE_API virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
1996 ENGINE_API virtual bool CanEditChange(const FProperty* InProperty) const override;
1997#endif // WITH_EDITOR
1998 ENGINE_API virtual void Serialize(FArchive& Ar) override;
1999 ENGINE_API virtual void PostInitProperties() override;
2000 ENGINE_API virtual void PostLoad() override;
2001 ENGINE_API virtual void PreSave(FObjectPreSaveContext ObjectSaveContext) override;
2002 ENGINE_API virtual void BeginDestroy() override;
2003 ENGINE_API virtual bool IsReadyForFinishDestroy() override;
2004 ENGINE_API virtual void FinishDestroy() override;
2005 ENGINE_API virtual void PostCDOContruct() override;
2006#if WITH_EDITORONLY_DATA
2008 ENGINE_API virtual void GetAssetRegistryTags(FAssetRegistryTagsContext Context) const override;
2009 UE_DEPRECATED(5.4, "Implement the version that takes FAssetRegistryTagsContext instead.")
2010 ENGINE_API virtual void GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const override;
2011#endif
2012 ENGINE_API virtual bool IsPostLoadThreadSafe() const override;
2013 //~ End UObject Interface.
2014
2015 //~ Begin UStreamableRenderAsset Interface
2016 virtual int32 GetLODGroupForStreaming() const final override { return static_cast<int32>(LODGroup); }
2018 ENGINE_API virtual FIoFilenameHash GetMipIoFilenameHash(const int32 MipIndex) const final override;
2019 ENGINE_API virtual bool DoesMipDataExist(const int32 MipIndex) const final override;
2020 ENGINE_API virtual bool HasPendingRenderResourceInitialization() const final override;
2021 ENGINE_API virtual bool HasPendingLODTransition() const final override;
2022 ENGINE_API virtual void InvalidateLastRenderTimeForStreaming() final override;
2023 ENGINE_API virtual float GetLastRenderTimeForStreaming() const final override;
2024 ENGINE_API virtual bool ShouldMipLevelsBeForcedResident() const final override;
2025 //~ End UStreamableRenderAsset Interface
2026
2031 ENGINE_API static void CancelPendingTextureStreaming();
2032
2041 ENGINE_API virtual float GetAverageBrightness(bool bIgnoreTrueBlack, bool bUseGrayscale);
2042
2043 // @todo document
2044 ENGINE_API static const TCHAR* GetTextureGroupString(TextureGroup InGroup);
2045
2046 // @todo document
2047 ENGINE_API static const TCHAR* GetMipGenSettingsString(TextureMipGenSettings InEnum);
2048
2049 // @param bTextureGroup true=TexturGroup, false=Texture otherwise
2050 ENGINE_API static TextureMipGenSettings GetMipGenSettingsFromString(const TCHAR* InStr, bool bTextureGroup);
2051
2056 ENGINE_API static bool ForceUpdateTextureStreaming();
2057
2063 bool HasHDRSource(int32 LayerIndex = 0) const
2064 {
2065#if WITH_EDITOR
2066 return FTextureSource::IsHDR(Source.GetFormat(LayerIndex));
2067#else
2068 return false;
2069#endif // WITH_EDITOR
2070 }
2071
2072
2074 bool IsNormalMap() const
2075 {
2076 return (CompressionSettings == TC_Normalmap);
2077 }
2078
2080 bool IsUncompressed() const
2081 {
2082 return UE::TextureDefines::IsUncompressed(CompressionSettings);
2083 }
2084
2093 ENGINE_API bool IsCookPlatformTilingDisabled(const ITargetPlatformSettings* TargetPlatformSettings) const;
2094
2098 ENGINE_API bool IsCookPlatformTilingDisabled(const ITargetPlatform* TargetPlatform) const;
2099
2108 {
2109 return 0;
2110 }
2111
2113 const FGuid& GetLightingGuid() const
2114 {
2115 return LightingGuid;
2116 }
2117
2124 {
2125#if WITH_EDITORONLY_DATA
2127#else
2128 LightingGuid = FGuid(0, 0, 0, 0);
2129#endif // WITH_EDITORONLY_DATA
2130 }
2131
2133 {
2135 }
2136
2140 ENGINE_API void SetDeterministicLightingGuid();
2141
2142#if WITH_EDITORONLY_DATA
2150#endif
2151
2155 ENGINE_API static class UEnum* GetPixelFormatEnum();
2156
2159 {
2160 return GMinTextureResidentMipCount;
2161 }
2162
2164 static void SetMinTextureResidentMipCount(int32 InMinTextureResidentMipCount);
2165
2168 bool IsPossibleToStream() const;
2169
2170#if WITH_EDITOR
2174
2175 /*
2176 * Downsize the 2D Image with the build settings for the texture until all dimensions are <= TargetSize.
2177 * This downsizes using the mip generation system and so will only cut sizes in half. Return false
2178 * if a parameter is invalid. Returns true if the output is <= TargetSize, whether or not downsizing occurred.
2179 */
2180 ENGINE_API bool DownsizeImageUsingTextureSettings(const ITargetPlatform* TargetPlatform, FImage& InOutImage, int32 TargetSize, int32 LayerIndex, bool & OutMadeChanges) const;
2181
2182 /*
2183 */
2185
2186#endif
2187
2191 ENGINE_API static int32 GetMaximumDimensionOfNonVT();
2192
2193protected:
2194
2197
2198#if WITH_EDITOR
2199 // The Texture compiler might use TryCancelCachePlatformData on shutdown
2200 friend class FTextureCompilingManager;
2201
2203 {
2204 Default,
2205 DoesNotInvalidate
2206 };
2211
2213 ENGINE_API void NotifyMaterials(const ENotifyMaterialsEffectOnShaders EffectOnShaders = ENotifyMaterialsEffectOnShaders::Default);
2214
2215#endif //WITH_EDITOR
2216
2217 void BeginFinalReleaseResource();
2218
2227 FStreamableRenderResourceState GetResourcePostInitState(const FTexturePlatformData* PlatformData, bool bAllowStreaming, int32 MinRequestMipCount = 0, int32 MaxMipCount = 0, bool bSkipCanBeLoaded = false) const;
2228};
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
void AsyncTask(ENamedThreads::Type Thread, TUniqueFunction< void()> Function)
Definition Async.cpp:54
virtual bool IsPostLoadThreadSafe() const override
uint32 FIoFilenameHash
Definition BulkData.h:68
EGammaSpace
Definition Color.h:32
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define PURE_VIRTUAL(func,...)
Definition CoreMiscDefines.h:103
EForceInit
Definition CoreMiscDefines.h:154
@ ForceInitToZero
Definition CoreMiscDefines.h:156
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
void Init()
Definition LockFreeList.h:4
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
EMaterialValueType
Definition MaterialValueType.h:15
@ MCT_Texture
Definition MaterialValueType.h:87
UE::Math::TVector4< double > FVector4
Definition MathFwd.h:49
const bool
Definition NetworkReplayStreaming.h:178
#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
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EPixelFormat
Definition PixelFormat.h:16
@ PF_Unknown
Definition PixelFormat.h:17
uint32 GetNumMips(uint32 MipSize)
Definition ReflectionEnvironmentCapture.h:20
EStreamableRenderAssetType
Definition StreamableRenderAsset.h:26
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
TStringView< TCHAR > FStringView
Definition StringFwd.h:45
ETextureStreamingMethod
Definition TextureDefines.h:527
ETextureMipCount
Definition TextureDefines.h:505
ETextureSourceFormat
Definition TextureDefines.h:351
TextureFilter
Definition TextureDefines.h:485
ETextureColorSpace
Definition TextureDefines.h:441
TextureAddress
Definition TextureDefines.h:496
TextureCompressionSettings
Definition TextureDefines.h:392
ETextureDownscaleOptions
Definition TextureDefines.h:237
ETextureEncodeSpeed
Definition TextureDefines.h:287
ETextureMipLoadOptions
Definition TextureDefines.h:219
TextureMipGenSettings
Definition TextureDefines.h:129
TextureGroup
Definition TextureDefines.h:29
ETextureSourceEncoding
Definition TextureDefines.h:416
TextureCookPlatformTilingSettings
Definition TextureDefines.h:462
ETextureChromaticAdaptationMethod
Definition TextureDefines.h:475
ETextureAvailability
Definition TextureDefines.h:230
ETextureClass
Definition TextureDefines.h:299
ETextureSourceCompressionFormat
Definition TextureDefines.h:338
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
EVTProducerPriority
Definition VirtualTextureEnum.h:11
int BlockIndex
Definition binka_ue_decode_test.cpp:38
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ColorManagement.Build.cs:7
Definition Archive.h:1208
Definition AssetRegistryTagsContext.h:98
Definition FeedbackContext.h:30
Definition NameTypes.h:617
Definition ObjectSaveContext.h:244
Definition UnrealType.h:3087
Definition OutputDevice.h:133
Definition UnrealType.h:174
Definition RenderCommandFence.h:15
virtual RENDERCORE_API void ReleaseResource()
Definition RenderResource.cpp:206
Definition SharedBuffer.h:341
Definition RenderResource.h:435
Definition TextureResource.h:103
Definition ObjectMacros.h:180
Definition IImageWrapperModule.h:50
Definition Interface_AssetUserData.h:20
Definition Interface_AsyncCompilation.h:21
Definition Array.h:670
Definition EnumAsByte.h:22
Definition AssetRegistryState.h:50
Definition Future.h:393
Definition IndirectArray.h:20
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition SubclassOf.h:30
Definition UniquePtr.h:107
Definition TVariant.h:48
Definition SharedPointer.h:1295
Definition AssetUserData.h:18
Definition EditorBulkData.h:132
Definition Class.h:2791
Definition StreamableRenderAsset.h:37
Definition Texture2DArray.h:16
Definition Texture2D.h:26
Definition TextureCubeArray.h:12
Definition TextureCube.h:15
Definition Texture.h:1219
virtual TMap< FString, FTexturePlatformData * > * GetCookedPlatformData()
Definition Texture.h:1777
virtual int32 GetLODGroupForStreaming() const final override
Definition Texture.h:2016
ENGINE_API void GetBuiltTextureSize(const class ITargetPlatformSettings *TargetPlatformSettings, const class ITargetPlatformControls *TargetPlatformControls, int32 &OutSizeX, int32 &OutSizeY, int32 &OutSizeZ) const
bool bOodlePreserveExtremes
Definition Texture.h:1498
uint8 VirtualTexturePrefetchMips
Definition Texture.h:1490
virtual TextureAddress GetTextureAddressY() const
Definition Texture.h:1973
bool IsUncompressed() const
Definition Texture.h:2080
FPerPlatformFloat Downscale
Definition Texture.h:1516
FTextureReference & TextureReference
Definition Texture.h:1666
TArray< TObjectPtr< UAssetUserData > > AssetUserData
Definition Texture.h:1633
virtual FTexturePlatformData ** GetRunningPlatformData()
Definition Texture.h:1776
const FGuid & GetLightingGuid() const
Definition Texture.h:2113
FRenderCommandFence ReleaseFence
Definition Texture.h:1669
void Blueprint_GetTextureSourceDiskAndMemorySize(int64 &OutDiskSize, int64 &OutMemorySize) const
Definition Texture.cpp:4669
int64 Blueprint_GetMemorySize() const
Definition Texture.cpp:4664
static ENGINE_API FOnTextureSaved PreSaveEvent
Definition Texture.h:1674
bool ComputeTextureSourceChannelMinMax(FLinearColor &OutColorMin, FLinearColor &OutColorMax) const
Definition Texture.cpp:4696
static int32 GetStaticMinTextureResidentMipCount()
Definition Texture.h:2158
uint8 CompressionYCoCg
Definition Texture.h:1582
bool Blueprint_GetTextureSourceIdString(FString &OutTextureSourceId)
Definition Texture.cpp:4680
virtual uint32 CalcTextureMemorySizeEnum(ETextureMipCount Enum) const
Definition Texture.h:2107
static ENGINE_API int32 GMinTextureResidentMipCount
Definition Texture.h:2196
TEnumAsByte< enum TextureCompressionSettings > CompressionSettings
Definition Texture.h:1470
void GetBuiltTextureSize(const class ITargetPlatformSettings *TargetPlatformSettings, const class ITargetPlatformControls *TargetPlatformControls, int32 &OutSizeX, int32 &OutSizeY) const
Definition Texture.h:1793
EVTProducerPriority VirtualTextureStreamingPriority
Definition Texture.h:1482
uint8 VirtualTextureStreaming
Definition Texture.h:1569
int32 LevelIndex
Definition Texture.h:1462
virtual bool AreDownscalePropertiesEditable() const
Definition Texture.h:1508
int32 LODBias
Definition Texture.h:1466
uint32 bUseVirtualTextureStreamingPriority
Definition Texture.h:1573
TEnumAsByte< enum TextureGroup > LODGroup
Definition Texture.h:1502
uint8 bNotOfflineProcessed
Definition Texture.h:1590
uint8 bNoTiling
Definition Texture.h:1565
void GetBuiltTextureSize(const ITargetPlatform *TargetPlatform, int32 &OutSizeX, int32 &OutSizeY) const
Definition Texture.h:1788
void SetLightingGuid(const FGuid &Guid)
Definition Texture.h:2132
ETextureAvailability Availability
Definition Texture.h:1527
ETextureMipLoadOptions MipLoadOptions
Definition Texture.h:1478
ETextureDownscaleOptions DownscaleOptions
Definition Texture.h:1520
virtual EMaterialValueType GetMaterialType() const PURE_VIRTUAL(UTexture
Definition Texture.h:1742
virtual class FTextureResource * CreateResource() PURE_VIRTUAL(UTexture
Definition Texture.h:1716
virtual ETextureClass GetTextureClass() const PURE_VIRTUAL(UTexture
Definition Texture.h:1681
int32 GetCachedLODBias() const override
Definition Texture.h:1725
EGammaSpace GetGammaSpace() const
Definition Texture.h:1944
virtual FGuid GetExternalTextureGuid() const
Definition Texture.h:1979
virtual TextureAddress GetTextureAddressZ() const
Definition Texture.h:1974
DECLARE_MULTICAST_DELEGATE_OneParam(FOnTextureSaved, class UTexture *)
EUpdateResourceFlags
Definition Texture.h:1697
virtual EStreamableRenderAssetType GetRenderAssetType() const final override
Definition Texture.h:2017
bool IsNormalMap() const
Definition Texture.h:2074
void SetLightingGuid()
Definition Texture.h:2123
TEnumAsByte< enum TextureCookPlatformTilingSettings > CookPlatformTilingSettings
Definition Texture.h:1494
virtual float GetSurfaceWidth() const PURE_VIRTUAL(UTexture
Definition Texture.h:1961
Definition VolumeTexture.h:17
HitType * GetBlock(FSQHitBuffer< HitType > &Callback)
Definition ChaosInterfaceWrapperCore.h:253
constexpr int32 NumMips
Definition DistanceFieldAtlas.h:44
IMAGECORE_API int64 GetBytesPerPixel(Type Format)
Definition ImageCore.cpp:1415
Definition OodleDataCompression.cpp:28
ECompressor
Definition OodleDataCompression.h:49
ECompressionLevel
Definition OodleDataCompression.h:94
INTERACTIVETOOLSFRAMEWORK_API bool IsVolume(const UActorComponent &Component)
Definition ToolBuilderUtil.cpp:141
Definition DerivedData.cpp:40
bool IsUncompressed(TextureCompressionSettings CompressionSettings)
Definition TextureDefines.h:560
bool IsHDR(ETextureSourceFormat Format)
Definition TextureDefines.h:540
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition Color.h:486
Definition Guid.h:109
Definition ImageCore.h:139
Definition ImageCore.h:264
Definition ImageCore.h:416
Definition IoHash.h:33
Definition Color.h:48
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
Definition Texture.h:804
friend FArchive & operator<<(FArchive &Ar, FOptTexturePlatformData &Data)
Definition Texture.h:826
bool operator!=(FOptTexturePlatformData const &RHS) const
Definition Texture.h:821
uint32 ExtData
Definition Texture.h:806
FOptTexturePlatformData()
Definition Texture.h:810
bool operator==(FOptTexturePlatformData const &RHS) const
Definition Texture.h:815
uint32 NumMipsInTail
Definition Texture.h:808
Definition PerPlatformProperties.h:304
Definition UnrealType.h:6865
Definition ImageCore.h:746
Definition StreamableRenderResourceState.h:23
Definition TextureResource.h:46
Definition Texture.h:1141
bool operator==(const FTextureFormatSettings &other) const =default
Definition Texture.h:839
void SetOptData(FOptTexturePlatformData Data)
Definition Texture.h:1024
bool GetHasCpuCopy() const
Definition Texture.h:1033
bool IsCubemap() const
Definition Texture.h:1043
int32 GetNumMipsInTail() const
Definition Texture.h:1063
int32 GetExtData() const
Definition Texture.h:1068
void SetHasCpuCopy(bool bInHasCpuCopy)
Definition Texture.h:1038
void SetIsCubemap(bool bCubemap)
Definition Texture.h:1048
void SetPackedData(int32 InNumSlices, bool bInHasOptData, bool bInCubeMap, bool bInHasCpuCopy)
Definition Texture.h:1014
int32 GetNumSlices() const
Definition Texture.h:1053
void SetNumSlices(int32 NumSlices)
Definition Texture.h:1058
bool GetHasOptData() const
Definition Texture.h:1019
Definition Texture.h:63
Definition Texture.h:1177
Definition Texture.h:49
Definition Texture.h:92
ELockState
Definition Texture.h:104
static bool IsHDR(ETextureSourceFormat Format)
Definition Texture.h:101
Definition VirtualTextureBuildSettings.h:11
Definition VirtualTextureBuiltData.h:131
Definition DontCopy.h:13
Definition ObjectPtr.h:488
Definition IntPoint.h:25