// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "gstests/Fixtures.h" #include "gstests/MockedReader.h" #include "genesplicer/TypeDefs.h" #include #if defined(__clang__) || defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #endif #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4100) #endif namespace gs4 { class FixtureReader : public dna::MockedReader { public: enum { archetype = 2u, expected = 3u }; public: static FixtureReader* create(std::uint16_t dnaIndex) { return new FixtureReader(dnaIndex); } static void destroy(FixtureReader* instance) { delete instance; } explicit FixtureReader(std::uint16_t dnaIndex_) : dnaIndex{dnaIndex_} { } StringView getName() const override { return {"Character", 9ul}; } std::uint16_t getPSDCount() const override { return canonical::psdCount; } std::uint16_t getMeshCount() const override { return canonical::meshCount; } std::uint16_t getJointCount() const override { return canonical::jointCount; } StringView getMeshName(std::uint16_t meshIndex) const override { return {"testMesh", 8ul}; } StringView getJointName(std::uint16_t jointIndex) const override { return {"testJoint", 9ul}; } StringView getBlendShapeChannelName(std::uint16_t channelIndex) const override { return {"testBlendShape", 14ul}; } Vector3 getNeutralJointTranslation(std::uint16_t index) const override { return { canonical::neutralJointTranslations[dnaIndex][0ul][index], canonical::neutralJointTranslations[dnaIndex][1ul][index], canonical::neutralJointTranslations[dnaIndex][2ul][index] }; } ConstArrayView getNeutralJointTranslationXs() const override { return ConstArrayView{canonical::neutralJointTranslations[dnaIndex][0ul]}; } ConstArrayView getNeutralJointTranslationYs() const override { return ConstArrayView{canonical::neutralJointTranslations[dnaIndex][1ul]}; } ConstArrayView getNeutralJointTranslationZs() const override { return ConstArrayView{canonical::neutralJointTranslations[dnaIndex][2ul]}; } Vector3 getNeutralJointRotation(std::uint16_t index) const override { return { canonical::neutralJointRotations[dnaIndex][0ul][index], canonical::neutralJointRotations[dnaIndex][1ul][index], canonical::neutralJointRotations[dnaIndex][2ul][index] }; } ConstArrayView getNeutralJointRotationXs() const override { return ConstArrayView{canonical::neutralJointRotations[dnaIndex][0ul]}; } ConstArrayView getNeutralJointRotationYs() const override { return ConstArrayView{canonical::neutralJointRotations[dnaIndex][1ul]}; } ConstArrayView getNeutralJointRotationZs() const override { return ConstArrayView{canonical::neutralJointRotations[dnaIndex][2ul]}; } std::uint32_t getVertexPositionCount(std::uint16_t meshIndex) const override { return static_cast(canonical::neutralMeshes[dnaIndex][meshIndex][0].size()); } dna::Position getVertexPosition(std::uint16_t meshIndex, std::uint32_t vertexIndex) const override { return { canonical::neutralMeshes[dnaIndex][meshIndex][0ul][vertexIndex], canonical::neutralMeshes[dnaIndex][meshIndex][1ul][vertexIndex], canonical::neutralMeshes[dnaIndex][meshIndex][2ul][vertexIndex] }; } ConstArrayView getVertexPositionXs(std::uint16_t meshIndex) const override { return ConstArrayView{canonical::neutralMeshes[dnaIndex][meshIndex][0ul]}; } ConstArrayView getVertexPositionYs(std::uint16_t meshIndex) const override { return ConstArrayView{canonical::neutralMeshes[dnaIndex][meshIndex][1ul]}; } ConstArrayView getVertexPositionZs(std::uint16_t meshIndex) const override { return ConstArrayView{canonical::neutralMeshes[dnaIndex][meshIndex][2ul]}; } std::uint32_t getVertexNormalCount(std::uint16_t meshIndex) const override { return static_cast(canonical::neutralMeshes[dnaIndex][meshIndex][0].size()); } dna::Normal getVertexNormal(std::uint16_t meshIndex, std::uint32_t normalIndex) const override { return { canonical::neutralMeshes[dnaIndex][meshIndex][0ul][normalIndex], canonical::neutralMeshes[dnaIndex][meshIndex][1ul][normalIndex], canonical::neutralMeshes[dnaIndex][meshIndex][2ul][normalIndex] }; } ConstArrayView getVertexNormalXs(std::uint16_t meshIndex) const override { return ConstArrayView{canonical::neutralMeshes[dnaIndex][meshIndex][0ul]}; } ConstArrayView getVertexNormalYs(std::uint16_t meshIndex) const override { return ConstArrayView{canonical::neutralMeshes[dnaIndex][meshIndex][1ul]}; } ConstArrayView getVertexNormalZs(std::uint16_t meshIndex) const override { return ConstArrayView{canonical::neutralMeshes[dnaIndex][meshIndex][2ul]}; } ConstArrayView getSkinWeightsValues(std::uint16_t meshIndex, std::uint32_t vertexIndex) const override { return ConstArrayView{canonical::skinWeightsValues[dnaIndex][meshIndex][vertexIndex]}; } ConstArrayView getSkinWeightsJointIndices(std::uint16_t meshIndex, std::uint32_t vertexIndex) const override { return ConstArrayView{canonical::skinWeightsJointIndices[dnaIndex][meshIndex][vertexIndex]}; } std::uint32_t getSkinWeightsCount(std::uint16_t meshIndex) const override { return static_cast(canonical::skinWeightsValues[dnaIndex][meshIndex].size()); } std::uint16_t getMaximumInfluencePerVertex(std::uint16_t meshIndex) const override { return 2ul; } std::uint16_t getJointGroupCount() const override { return canonical::regionCount; } ConstArrayView getJointGroupLODs(std::uint16_t jointGroupIndex) const override { return ConstArrayView{canonical::jointGroupLODs[dnaIndex][jointGroupIndex]}; } ConstArrayView getJointGroupInputIndices(std::uint16_t jointGroupIndex) const override { return ConstArrayView{canonical::jointGroupInputIndices[jointGroupIndex]}; } ConstArrayView getJointGroupOutputIndices(std::uint16_t jointGroupIndex) const override { return ConstArrayView{canonical::jointGroupOutputIndices[dnaIndex][jointGroupIndex]}; } ConstArrayView getJointGroupValues(std::uint16_t jointGroupIndex) const override { return ConstArrayView{canonical::jointGroupValues[dnaIndex][jointGroupIndex]}; } ConstArrayView getJointGroupJointIndices(std::uint16_t jointGroupIndex) const override { return ConstArrayView{canonical::jointGroupJointIndices[dnaIndex][jointGroupIndex]}; } std::uint16_t getBlendShapeChannelCount() const override { return canonical::blendShapeCount; } std::uint16_t getBlendShapeTargetCount(std::uint16_t meshIndex) const override { return canonical::blendShapeCount; } std::uint32_t getBlendShapeTargetDeltaCount(std::uint16_t meshIndex, std::uint16_t blendShapeTargetIndex) const override { return static_cast(canonical::blendShapeTargetDeltas[dnaIndex][blendShapeTargetIndex][0ul].size()); } dna::Delta getBlendShapeTargetDelta(std::uint16_t meshIndex, std::uint16_t blendShapeTargetIndex, std::uint32_t deltaIndex) const override { const auto& deltas = canonical::blendShapeTargetDeltas[dnaIndex][blendShapeTargetIndex]; return {deltas[0ul][deltaIndex], deltas[1ul][deltaIndex], deltas[2ul][deltaIndex]}; } ConstArrayView getBlendShapeTargetDeltaXs(std::uint16_t meshIndex, std::uint16_t blendShapeTargetIndex) const override { return ConstArrayView{canonical::blendShapeTargetDeltas[dnaIndex][blendShapeTargetIndex][0ul]}; } ConstArrayView getBlendShapeTargetDeltaYs(std::uint16_t meshIndex, std::uint16_t blendShapeTargetIndex) const override { return ConstArrayView{canonical::blendShapeTargetDeltas[dnaIndex][blendShapeTargetIndex][1ul]}; } ConstArrayView getBlendShapeTargetDeltaZs(std::uint16_t meshIndex, std::uint16_t blendShapeTargetIndex) const override { return ConstArrayView{canonical::blendShapeTargetDeltas[dnaIndex][blendShapeTargetIndex][2ul]}; } ConstArrayView getBlendShapeTargetVertexIndices(std::uint16_t meshIndex, std::uint16_t blendShapeTargetIndex) const override { return ConstArrayView{canonical::blendShapeTargetVertexIndices[dnaIndex][blendShapeTargetIndex]}; } private: std::uint16_t dnaIndex; }; } // namespace gs4 #if defined(__clang__) || defined(__GNUC__) #pragma GCC diagnostic pop #endif #ifdef _MSC_VER #pragma warning(pop) #endif