bmh/FlightSimulation/Plugins/CesiumForUnreal_5.4/Source/CesiumRuntime/Private/CesiumEncodedMetadataUtility.h
2025-02-07 22:52:32 +08:00

147 lines
3.9 KiB
C++

// 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<CesiumTextureUtility::LoadedTextureResult> pTexture;
};
struct EncodedMetadataFeatureTable {
/**
* @brief The encoded properties in this feature table.
*/
TArray<EncodedMetadataProperty> 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<CesiumTextureUtility::LoadedTextureResult> 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<CesiumTextureUtility::LoadedTextureResult> pTexture;
int64 textureCoordinateAttributeId;
int32 channelOffsets[4];
};
struct EncodedFeatureTexture {
TArray<EncodedFeatureTextureProperty> properties;
};
struct EncodedMetadataPrimitive {
TArray<EncodedFeatureIdTexture> encodedFeatureIdTextures;
TArray<EncodedFeatureIdAttribute> encodedFeatureIdAttributes;
TArray<FString> featureTextureNames;
};
struct EncodedMetadata {
TMap<FString, EncodedMetadataFeatureTable> encodedFeatureTables;
TMap<FString, EncodedFeatureTexture> encodedFeatureTextures;
};
EncodedMetadataFeatureTable encodeMetadataFeatureTableAnyThreadPart(
const FFeatureTableDescription& featureTableDescription,
const FCesiumPropertyTable& featureTable);
EncodedFeatureTexture encodeFeatureTextureAnyThreadPart(
TMap<
const CesiumGltf::ImageAsset*,
TWeakPtr<CesiumTextureUtility::LoadedTextureResult>>&
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<TUniquePtr<CesiumTextureUtility::LoadedTextureResult>>&
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