// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "raf/BaseImpl.h" #include "raf/TypeDefs.h" #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4365 4987) #endif #include #include #include #ifdef _MSC_VER #pragma warning(pop) #endif namespace raf { template class ReaderImpl : public TReaderBase, public virtual BaseImpl { public: using ReaderInterface = TReaderBase; public: explicit ReaderImpl(MemoryResource* memRes_); // JointRegionAffiliationReader methods std::uint16_t getJointCount() const override; ConstArrayView getJointRegionIndices(std::uint16_t jointIndex) const override; ConstArrayView getJointRegionAffiliation(std::uint16_t jointIndex) const override; // VertexRegionAffiliationReader methods std::uint16_t getMeshCount() const override; std::uint32_t getVertexCount(std::uint16_t meshIndex) const override; ConstArrayView getVertexRegionIndices(std::uint16_t meshIndex, std::uint32_t vertexIndex) const override; ConstArrayView getVertexRegionAffiliation(std::uint16_t meshIndex, std::uint32_t vertexIndex) const override; // RegionAffiliationReader methods std::uint16_t getRegionCount() const override; StringView getRegionName(std::uint16_t regionIndex) const override; }; #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4589) #endif template inline ReaderImpl::ReaderImpl(MemoryResource* memRes_) : BaseImpl{memRes_} { } #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4505) #endif template inline std::uint16_t ReaderImpl::getJointCount() const { return static_cast(regionAffiliation.jointRegions.size()); } template inline ConstArrayView ReaderImpl::getJointRegionIndices(std::uint16_t jointIndex) const { if (getJointCount() <= jointIndex) { return {}; } return ConstArrayView{regionAffiliation.jointRegions[jointIndex].regionIndices}; } template inline ConstArrayView ReaderImpl::getJointRegionAffiliation(std::uint16_t jointIndex) const { if (getJointCount() <= jointIndex) { return {}; } return ConstArrayView{regionAffiliation.jointRegions[jointIndex].values}; } template inline std::uint16_t ReaderImpl::getMeshCount() const { return static_cast(regionAffiliation.vertexRegions.size()); } template inline std::uint32_t ReaderImpl::getVertexCount(std::uint16_t meshIndex) const { if (getMeshCount() <= meshIndex) { return {}; } return static_cast(regionAffiliation.vertexRegions[meshIndex].size()); } template inline ConstArrayView ReaderImpl::getVertexRegionIndices(std::uint16_t meshIndex, std::uint32_t vertexIndex) const { if ((getMeshCount() <= meshIndex) || (getVertexCount(meshIndex) <= vertexIndex)) { return {}; } return ConstArrayView{regionAffiliation.vertexRegions[meshIndex][vertexIndex].regionIndices}; } template inline ConstArrayView ReaderImpl::getVertexRegionAffiliation(std::uint16_t meshIndex, std::uint32_t vertexIndex) const { if ((getMeshCount() <= meshIndex) || (getVertexCount(meshIndex) <= vertexIndex)) { return {}; } return ConstArrayView{regionAffiliation.vertexRegions[meshIndex][vertexIndex].values}; } template inline std::uint16_t ReaderImpl::getRegionCount() const { return static_cast(regionAffiliation.regionNames.size()); } template inline StringView ReaderImpl::getRegionName(std::uint16_t regionIndex) const { if (regionIndex < regionAffiliation.regionNames.size()) { return StringView{regionAffiliation.regionNames[regionIndex]}; } return {}; } #ifdef _MSC_VER #pragma warning(pop) #endif } // namespace raf