15#include <unordered_map>
16#include <unordered_set>
88 std::array<float, 2>
uv{-1.0F, -1.0F};
103 std::vector<std::uint8_t>
rgba;
124 std::shared_ptr<const ModernTextureImage>
image;
136 std::array<float, 4>
diffuse{1.0F, 1.0F, 1.0F, 1.0F};
173 [[
nodiscard]]
static std::expected<MeshXRuntime, MeshRuntimeError>
build(
174 std::shared_ptr<const LegacyMeshData>
source,
178 [[
nodiscard]] std::shared_ptr<const LegacyMeshData>
source()
const noexcept;
180 [[
nodiscard]]
const std::vector<MeshGroupRuntime>&
groups()
const noexcept;
189 std::span<
const std::shared_ptr<const HmdTextureImage>>
images)
const;
192 std::shared_ptr<const LegacyMeshData> source_;
193 std::vector<MeshVertex> vertices_;
194 std::vector<MeshGroupRuntime> groups_;
196 std::vector<std::array<std::uint16_t, 2>> sourceIndices_;
197 std::vector<HmdMimePose> mimePoses_;
218 const MeshXRuntime& mesh, std::int32_t
poseA, std::int32_t
poseB,
233 std::shared_ptr<const MeshXRuntime>
mesh;
240 std::expected<std::optional<std::shared_ptr<const MeshRenderData>>,
243 std::optional<DataId> rootSequenceDataId,
257 std::optional<DataId> rootSequenceDataId = std::nullopt,
266 DataId id, std::span<
const std::shared_ptr<const HmdTextureImage>>
images);
273 void clear()
noexcept;
276 std::shared_ptr<const ResourceSnapshot> resources_;
283 std::unordered_map<DataId, std::vector<std::shared_ptr<const MeshRuntimeAsset>>>
285 std::vector<std::shared_ptr<const MeshRenderData>> rejectedModernAssets_;
286 std::unordered_set<DataId> rejectedModernSequences_;
287 std::unordered_map<DataId, std::shared_ptr<const MeshRuntimeAsset>> assets_;
288 std::unordered_map<
DataId,
289 std::vector<std::shared_ptr<const HmdTextureImage>>> textureOverrides_;
std::size_t releaseUnused() noexcept
std::expected< void, MeshRuntimeError > replaceTextureImages(DataId id, std::span< const std::shared_ptr< const HmdTextureImage > > images)
std::expected< std::shared_ptr< const MeshRuntimeAsset >, MeshRuntimeError > resolve(DataId id, std::optional< DataId > rootSequenceDataId=std::nullopt, std::uint16_t priority=0)
bool rejectModernAsset(const MeshRenderData *renderData)
std::size_t size() const noexcept
void rejectModernSequence(DataId rootSequenceDataId)
std::shared_ptr< const ResourceSnapshot > resources() const noexcept
const std::vector< MeshGroupRuntime > & groups() const noexcept
std::expected< MeshXRuntime, MeshRuntimeError > withTextureImages(std::span< const std::shared_ptr< const HmdTextureImage > > images) const
static std::expected< MeshXRuntime, MeshRuntimeError > build(std::shared_ptr< const LegacyMeshData > source, MeshTextureResolver textureResolver={}, MeshRuntimeLimits limits={})
std::expected< MeshPoseData, MeshRuntimeError > evaluatePose(std::int32_t poseA, std::int32_t poseB, float proportion) const
std::shared_ptr< const LegacyMeshData > source() const noexcept
const std::vector< MeshVertex > & vertices() const noexcept
const MeshBounds & bounds() const noexcept
std::size_t poseCount() const noexcept
std::function< std::expected< std::optional< std::shared_ptr< const MeshRenderData > >, MeshRuntimeError >(DataId, std::optional< DataId > rootSequenceDataId, std::uint16_t priority)> ModernMeshResolver
std::function< std::optional< MeshTextureRegion >(const MeshTextureLookup &)> MeshTextureResolver
MeshRenderData makeMeshRenderData(const MeshXRuntime &mesh)
std::array< float, 3 > maximum
std::array< float, 3 > minimum
std::vector< std::uint32_t > indices
std::optional< MeshTextureRegion > texture
std::array< float, 4 > diffuse
std::optional< ModernTextureBinding > normalTexture
ModernAlphaMode alphaMode
std::optional< ModernTextureBinding > occlusionTexture
std::optional< ModernTextureBinding > metallicRoughnessTexture
std::array< float, 3 > emissive
std::optional< ModernTextureBinding > emissiveTexture
std::optional< ModernTextureBinding > baseColorTexture
std::vector< MeshVertex > vertices
std::optional< MeshTextureRegion > texture
std::vector< MeshRenderBatch > batches
std::vector< std::uint32_t > indices
std::vector< MeshVertex > vertices
std::shared_ptr< const MeshXRuntime > mesh
std::shared_ptr< const MeshRenderData > renderData
std::optional< MeshDataError > sourceError
std::size_t skippedTexturedTriangles
std::size_t skippedUnsupportedSections
MeshRuntimeErrorCode code
std::size_t maximumVertices
std::size_t maximumGroups
std::size_t maximumIndices
std::shared_ptr< const HmdTextureImage > sourceImage
bool operator==(const MeshTextureRegion &other) const noexcept
std::array< float, 2 > uv
std::array< float, 4 > tangent
std::array< float, 3 > position
std::array< float, 3 > normal
std::shared_ptr< const ModernTextureImage > image
ModernTextureColorSpace colorSpace
ModernTextureSampler sampler
std::vector< std::uint8_t > rgba
ModernTextureFilter magFilter
ModernTextureFilter minFilter
bool operator==(const ModernTextureSampler &) const noexcept=default