From 73a1aaa48099109d3b5ac76a1fa61a6790b749f9 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Sat, 7 Jan 2023 21:00:11 +0800 Subject: [PATCH] Updated model loading to match new model binary implementation Changed some calls in resource to match new names and defines --- SHADE_Engine/src/Animation/SHRig.cpp | 2 +- SHADE_Engine/src/Animation/SHRig.h | 4 +- .../Libraries/Loaders/SHModelLoader.cpp | 56 +++++++++++++------ SHADE_Engine/src/Assets/SHAssetManager.cpp | 4 +- 4 files changed, 45 insertions(+), 21 deletions(-) diff --git a/SHADE_Engine/src/Animation/SHRig.cpp b/SHADE_Engine/src/Animation/SHRig.cpp index 7c3059de..0d777c27 100644 --- a/SHADE_Engine/src/Animation/SHRig.cpp +++ b/SHADE_Engine/src/Animation/SHRig.cpp @@ -73,7 +73,7 @@ namespace SHADE /*-----------------------------------------------------------------------------------*/ /* Helper Functions */ /*-----------------------------------------------------------------------------------*/ - Handle SHRig::recurseCreateNode(const SHRigAsset& asset, const RigNode* sourceNode) + Handle SHRig::recurseCreateNode(const SHRigAsset& asset, const SHRigNode* sourceNode) { // Construct the node auto newNode = nodeStore.Create(); diff --git a/SHADE_Engine/src/Animation/SHRig.h b/SHADE_Engine/src/Animation/SHRig.h index 5c4f720d..66bb37ad 100644 --- a/SHADE_Engine/src/Animation/SHRig.h +++ b/SHADE_Engine/src/Animation/SHRig.h @@ -27,7 +27,7 @@ namespace SHADE /* Forward Declarations */ /*-----------------------------------------------------------------------------------*/ struct SHRigAsset; - struct RigNode; + struct SHRigNode; /*-----------------------------------------------------------------------------------*/ /* Type Definitions */ @@ -99,6 +99,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Helper Functions */ /*---------------------------------------------------------------------------------*/ - Handle recurseCreateNode(const SHRigAsset& asset, const RigNode* sourceNode); + Handle recurseCreateNode(const SHRigAsset& asset, const SHRigNode* sourceNode); }; } \ No newline at end of file diff --git a/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp index fb809a66..bfb97fda 100644 --- a/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp +++ b/SHADE_Engine/src/Assets/Libraries/Loaders/SHModelLoader.cpp @@ -23,19 +23,44 @@ namespace SHADE reinterpret_cast(&asset.header), sizeof(asset.header) ); - - asset.meshHeaders.resize(asset.header.meshCount); - asset.animHeaders.resize(asset.header.animCount); - - file.read( - reinterpret_cast(asset.meshHeaders.data()), - sizeof(asset.header.meshCount) * sizeof(SHMeshDataHeader) - ); - file.read( - reinterpret_cast(asset.animHeaders.data()), - sizeof(asset.header.animCount) * sizeof(SHAnimDataHeader) - ); + if (asset.header.meshCount > 0) + { + asset.meshHeaders.resize(asset.header.meshCount); + file.read( + reinterpret_cast(asset.meshHeaders.data()), + asset.header.meshCount * sizeof(SHMeshDataHeader) + ); + } + + if (asset.header.animCount > 0) + { + asset.animHeaders.resize(asset.header.animCount); + for (auto i {0}; i < asset.header.animCount; ++i) + { + auto& animHeader = asset.animHeaders[i]; + file.read( + reinterpret_cast(&animHeader.charCount), + sizeof(uint32_t) + ); + + file.read( + reinterpret_cast(&animHeader.animNodeCount), + sizeof(uint32_t) + ); + + animHeader.nodeHeaders.resize(animHeader.animNodeCount); + for (auto j {0}; j < animHeader.animNodeCount; ++j) + { + auto& nodeHeader = animHeader.nodeHeaders[j]; + + file.read( + reinterpret_cast(&nodeHeader), + sizeof(SHAnimNodeInfo) + ); + } + } + } } void SHModelLoader::ReadData(FileReference file, SHModelAsset& asset) @@ -208,7 +233,8 @@ namespace SHADE { auto const& header = headers[i]; auto& animAsset = *new SHAnimAsset; - + + animAsset.name.resize(header.charCount); file.read( animAsset.name.data(), header.charCount @@ -242,11 +268,9 @@ namespace SHADE if (!file.is_open()) { SHLOG_ERROR("[Model Loader] Unable to open SHModel File: {}", path.string()); - return; + return nullptr; } - file.seekg(0); - ReadHeaders(file, *result); ReadData(file, *result); diff --git a/SHADE_Engine/src/Assets/SHAssetManager.cpp b/SHADE_Engine/src/Assets/SHAssetManager.cpp index dcc95695..0a3dd765 100644 --- a/SHADE_Engine/src/Assets/SHAssetManager.cpp +++ b/SHADE_Engine/src/Assets/SHAssetManager.cpp @@ -437,7 +437,7 @@ namespace SHADE return; } - if (genMeta) + if (true) { GenerateNewMeta(newPath); } @@ -610,7 +610,7 @@ namespace SHADE for(auto const& subMesh : data->meshes) { SHAsset subAsset{ - .name = subMesh->header.name, + .name = subMesh->name, .id = GenerateAssetID(AssetType::MESH), .type = AssetType::MESH, .isSubAsset = true,