Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

132 lines
4.4 KiB
C++

// 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 <cstddef>
#include <limits>
#include <tuple>
#ifdef _MSC_VER
#pragma warning(pop)
#endif
namespace raf {
template<class TReaderBase>
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<std::uint16_t> getJointRegionIndices(std::uint16_t jointIndex) const override;
ConstArrayView<float> 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<std::uint16_t> getVertexRegionIndices(std::uint16_t meshIndex, std::uint32_t vertexIndex) const override;
ConstArrayView<float> 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<class TReaderBase>
inline ReaderImpl<TReaderBase>::ReaderImpl(MemoryResource* memRes_) : BaseImpl{memRes_} {
}
#ifdef _MSC_VER
#pragma warning(pop)
#endif
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4505)
#endif
template<class TReaderBase>
inline std::uint16_t ReaderImpl<TReaderBase>::getJointCount() const {
return static_cast<std::uint16_t>(regionAffiliation.jointRegions.size());
}
template<class TReaderBase>
inline ConstArrayView<std::uint16_t> ReaderImpl<TReaderBase>::getJointRegionIndices(std::uint16_t jointIndex) const {
if (getJointCount() <= jointIndex) {
return {};
}
return ConstArrayView<std::uint16_t>{regionAffiliation.jointRegions[jointIndex].regionIndices};
}
template<class TReaderBase>
inline ConstArrayView<float> ReaderImpl<TReaderBase>::getJointRegionAffiliation(std::uint16_t jointIndex) const {
if (getJointCount() <= jointIndex) {
return {};
}
return ConstArrayView<float>{regionAffiliation.jointRegions[jointIndex].values};
}
template<class TReaderBase>
inline std::uint16_t ReaderImpl<TReaderBase>::getMeshCount() const {
return static_cast<std::uint16_t>(regionAffiliation.vertexRegions.size());
}
template<class TReaderBase>
inline std::uint32_t ReaderImpl<TReaderBase>::getVertexCount(std::uint16_t meshIndex) const {
if (getMeshCount() <= meshIndex) {
return {};
}
return static_cast<std::uint32_t>(regionAffiliation.vertexRegions[meshIndex].size());
}
template<class TReaderBase>
inline ConstArrayView<std::uint16_t> ReaderImpl<TReaderBase>::getVertexRegionIndices(std::uint16_t meshIndex,
std::uint32_t vertexIndex) const {
if ((getMeshCount() <= meshIndex) || (getVertexCount(meshIndex) <= vertexIndex)) {
return {};
}
return ConstArrayView<std::uint16_t>{regionAffiliation.vertexRegions[meshIndex][vertexIndex].regionIndices};
}
template<class TReaderBase>
inline ConstArrayView<float> ReaderImpl<TReaderBase>::getVertexRegionAffiliation(std::uint16_t meshIndex,
std::uint32_t vertexIndex) const {
if ((getMeshCount() <= meshIndex) || (getVertexCount(meshIndex) <= vertexIndex)) {
return {};
}
return ConstArrayView<float>{regionAffiliation.vertexRegions[meshIndex][vertexIndex].values};
}
template<class TReaderBase>
inline std::uint16_t ReaderImpl<TReaderBase>::getRegionCount() const {
return static_cast<std::uint16_t>(regionAffiliation.regionNames.size());
}
template<class TReaderBase>
inline StringView ReaderImpl<TReaderBase>::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