// Copyright 2020-2024 CesiumGS, Inc. and Contributors #pragma once #include "CesiumMetadataValueType.h" #include "CesiumTextureUtility.h" #include "Containers/Array.h" #include "Containers/Map.h" #include "Containers/UnrealString.h" #include "Templates/SharedPointer.h" #include "Templates/UniquePtr.h" PRAGMA_DISABLE_DEPRECATION_WARNINGS struct FCesiumModelMetadata; struct FCesiumMetadataPrimitive; struct FCesiumPropertyTable; struct FCesiumPropertyTexture; struct FFeatureTableDescription; struct FFeatureTextureDescription; struct FMetadataDescription; struct FCesiumPrimitiveFeaturesDescription; /** * DEPRECATED. Use CesiumEncodedFeaturesMetadata instead. */ namespace CesiumEncodedMetadataUtility { struct EncodedMetadataProperty { /** * @brief The name of this property. */ FString name; /** * @brief The encoded property array. */ TUniquePtr pTexture; }; struct EncodedMetadataFeatureTable { /** * @brief The encoded properties in this feature table. */ TArray encodedProperties; }; struct EncodedFeatureIdTexture { /** * @brief The name to use for this feature id texture in the shader. */ FString baseName; /** * @brief The encoded feature table corresponding to this feature id * texture. */ FString featureTableName; /** * @brief The actual feature id texture. */ TSharedPtr pTexture; /** * @brief The channel that this feature id texture uses within the image. */ int32 channel; /** * @brief The texture coordinate accessor index for the feature id texture. */ int64 textureCoordinateAttributeId; }; struct EncodedFeatureIdAttribute { FString name; FString featureTableName; int32 index; }; struct EncodedFeatureTextureProperty { FString baseName; TSharedPtr pTexture; int64 textureCoordinateAttributeId; int32 channelOffsets[4]; }; struct EncodedFeatureTexture { TArray properties; }; struct EncodedMetadataPrimitive { TArray encodedFeatureIdTextures; TArray encodedFeatureIdAttributes; TArray featureTextureNames; }; struct EncodedMetadata { TMap encodedFeatureTables; TMap encodedFeatureTextures; }; EncodedMetadataFeatureTable encodeMetadataFeatureTableAnyThreadPart( const FFeatureTableDescription& featureTableDescription, const FCesiumPropertyTable& featureTable); EncodedFeatureTexture encodeFeatureTextureAnyThreadPart( TMap< const CesiumGltf::ImageAsset*, TWeakPtr>& featureTexturePropertyMap, const FFeatureTextureDescription& featureTextureDescription, const FString& featureTextureName, const FCesiumPropertyTexture& featureTexture); EncodedMetadataPrimitive encodeMetadataPrimitiveAnyThreadPart( const FMetadataDescription& metadataDescription, const FCesiumMetadataPrimitive& primitive); EncodedMetadata encodeMetadataAnyThreadPart( const FMetadataDescription& metadataDescription, const FCesiumModelMetadata& metadata); bool encodeMetadataFeatureTableGameThreadPart( EncodedMetadataFeatureTable& encodedFeatureTable); bool encodeFeatureTextureGameThreadPart( TArray>& uniqueTextures, EncodedFeatureTexture& encodedFeatureTexture); bool encodeMetadataPrimitiveGameThreadPart( EncodedMetadataPrimitive& encodedPrimitive); bool encodeMetadataGameThreadPart(EncodedMetadata& encodedMetadata); void destroyEncodedMetadataPrimitive( EncodedMetadataPrimitive& encodedPrimitive); void destroyEncodedMetadata(EncodedMetadata& encodedMetadata); FString createHlslSafeName(const FString& rawName); } // namespace CesiumEncodedMetadataUtility PRAGMA_ENABLE_DEPRECATION_WARNINGS