初始提交: UE5.3项目基础框架
This commit is contained in:
136
Plugins/CesiumForUnreal/Source/ThirdParty/include/CesiumGltf/FeatureIdTextureView.h
vendored
Normal file
136
Plugins/CesiumForUnreal/Source/ThirdParty/include/CesiumGltf/FeatureIdTextureView.h
vendored
Normal file
@ -0,0 +1,136 @@
|
||||
#pragma once
|
||||
|
||||
#include "CesiumGltf/FeatureIdTexture.h"
|
||||
#include "CesiumGltf/TextureView.h"
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
namespace CesiumGltf {
|
||||
|
||||
struct Model;
|
||||
|
||||
/**
|
||||
* @brief The status of a feature ID texture view.
|
||||
*
|
||||
* The {@link FeatureIdTextureView} constructor always completes successfully,
|
||||
* but it may not always reflect the actual content of the
|
||||
* {@link FeatureIdTexture}. This enumeration provides the reason.
|
||||
*/
|
||||
enum class FeatureIdTextureViewStatus {
|
||||
/**
|
||||
* @brief This view is valid and ready to use.
|
||||
*/
|
||||
Valid,
|
||||
|
||||
/**
|
||||
* @brief This view has not yet been initialized.
|
||||
*/
|
||||
ErrorUninitialized,
|
||||
|
||||
/**
|
||||
* @brief This feature ID texture has a texture index that doesn't exist in
|
||||
* the glTF.
|
||||
*/
|
||||
ErrorInvalidTexture,
|
||||
|
||||
/**
|
||||
* @brief This feature ID texture has an image index that doesn't exist in
|
||||
* the glTF.
|
||||
*/
|
||||
ErrorInvalidImage,
|
||||
|
||||
/**
|
||||
* @brief This feature ID texture has a sampler index that doesn't exist in
|
||||
* the glTF.
|
||||
*/
|
||||
ErrorInvalidSampler,
|
||||
|
||||
/**
|
||||
* @brief This feature ID texture has an empty image.
|
||||
*/
|
||||
ErrorEmptyImage,
|
||||
|
||||
/**
|
||||
* @brief The image for this feature ID texture has channels that take up more
|
||||
* than a byte. Only single-byte channels are supported.
|
||||
*/
|
||||
ErrorInvalidImageBytesPerChannel,
|
||||
|
||||
/**
|
||||
* @brief The channels of this feature ID texture property are invalid.
|
||||
* Channels must be in the range 0-3, with a minimum of one channel. Although
|
||||
* more than four channels can be defined for specialized texture
|
||||
* formats, this view only supports a maximum of four channels.
|
||||
*/
|
||||
ErrorInvalidChannels
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief A view on the image data of {@link FeatureIdTexture}.
|
||||
*
|
||||
* It provides the ability to sample the feature IDs from the
|
||||
* {@link FeatureIdTexture} using texture coordinates.
|
||||
*/
|
||||
class FeatureIdTextureView : public TextureView {
|
||||
public:
|
||||
/**
|
||||
* @brief Constructs an uninitialized and invalid view.
|
||||
*/
|
||||
FeatureIdTextureView() noexcept;
|
||||
|
||||
/**
|
||||
* @brief Construct a view of the data specified by a {@link FeatureIdTexture}.
|
||||
*
|
||||
* A feature ID texture may contain the `KHR_texture_transform` extension,
|
||||
* which transforms the texture coordinates used to sample the texture. The
|
||||
* extension may also override the TEXCOORD set index that was originally
|
||||
* specified by the feature ID texture.
|
||||
*
|
||||
* If a view is constructed with applyKhrTextureTransformExtension set to
|
||||
* true, the view will automatically apply the texture transform to any UV
|
||||
* coordinates used to sample the texture. If the extension defines its own
|
||||
* TEXCOORD set index, it will override the original value.
|
||||
*
|
||||
* Otherwise, if the flag is set to false, UVs will not be transformed and
|
||||
* the original TEXCOORD set index will be preserved. The extension's values
|
||||
* may still be retrieved using getTextureTransform, if desired.
|
||||
*
|
||||
* @param model The glTF in which to look for the feature ID texture's data.
|
||||
* @param featureIdTexture The feature ID texture to create a view for.
|
||||
* @param options The set of options to use for this `FeatureIdTextureView`.
|
||||
*/
|
||||
FeatureIdTextureView(
|
||||
const Model& model,
|
||||
const FeatureIdTexture& featureIdTexture,
|
||||
const TextureViewOptions& options = TextureViewOptions()) noexcept;
|
||||
|
||||
/**
|
||||
* @brief Get the feature ID from the texture at the given texture
|
||||
* coordinates. If the texture is somehow invalid, this returns -1.
|
||||
*
|
||||
* @param u The u-component of the texture coordinates. Must be within
|
||||
* [0.0, 1.0].
|
||||
* @param v The v-component of the texture coordinates. Must be within
|
||||
* [0.0, 1.0].
|
||||
* @return The feature ID at the nearest pixel to the texture coordinates.
|
||||
*/
|
||||
int64_t getFeatureID(double u, double v) const noexcept;
|
||||
|
||||
/**
|
||||
* @brief Get the status of this view.
|
||||
*
|
||||
* If invalid, it will not be safe to sample feature IDs from this view.
|
||||
*/
|
||||
FeatureIdTextureViewStatus status() const noexcept { return this->_status; }
|
||||
|
||||
/**
|
||||
* @brief Get the channels of this feature ID texture. The channels represent
|
||||
* the bytes of the actual feature ID, in little-endian order.
|
||||
*/
|
||||
std::vector<int64_t> getChannels() const noexcept { return this->_channels; }
|
||||
|
||||
private:
|
||||
FeatureIdTextureViewStatus _status;
|
||||
std::vector<int64_t> _channels;
|
||||
};
|
||||
} // namespace CesiumGltf
|
||||
Reference in New Issue
Block a user