From d03c12d1e26131c6319e8190a1931f3f7e24a013 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Mon, 21 Nov 2022 20:21:17 +0800 Subject: [PATCH] Write tree into binary with BFS style traversing --- src/Libraries/MeshWriter.cpp | 62 ++++++++++++++++++++++++++++++++++-- src/Libraries/MeshWriter.h | 4 +++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/Libraries/MeshWriter.cpp b/src/Libraries/MeshWriter.cpp index 5c21d1e..39f99a1 100644 --- a/src/Libraries/MeshWriter.cpp +++ b/src/Libraries/MeshWriter.cpp @@ -11,10 +11,10 @@ #include "MeshWriter.h" #include #include +#include namespace SH_COMP { - void MeshWriter::WriteMeshHeader(std::ofstream& file, MeshDataHeader const& header) { file.write( @@ -135,7 +135,65 @@ namespace SH_COMP ); } - + void MeshWriter::WriteRigHeader(FileReference file, RigDataHeader const& header) + { + file.write( + reinterpret_cast(header.nodeCount), + sizeof(uint32_t) + ); + + file.write( + reinterpret_cast(header.charCounts.data()), + sizeof(uint32_t) * header.nodeCount + ); + } + + void MeshWriter::WriteRigData(FileReference file, RigDataHeader const& header, + std::map const& data) + { + for (auto i {0}; i < header.nodeCount; ++i) + { + file.write( + data.at(i).name.data(), + header.charCounts[i] + ); + + file.write( + reinterpret_cast(&data.at(i).transform), + sizeof(SHMat4) + ); + } + } + + void MeshWriter::WriteRigNodes(FileReference file, RigDataHeader const& header, RigNode const* root) + { + std::queue nodeQueue; + nodeQueue.push(root); + + while(!nodeQueue.empty()) + { + auto const node = nodeQueue.front(); + nodeQueue.pop(); + + file.write( + reinterpret_cast(&node->idRef), + sizeof(uint32_t) + ); + + uint32_t const size { static_cast(node->children.size()) }; + + file.write( + reinterpret_cast(&size), + sizeof(uint32_t) + ); + + for (auto const& child : node->children) + { + nodeQueue.push(child); + } + } + } + void MeshWriter::WriteHeaders(FileReference file, ModelConstRef asset) { for (auto const& header : asset.meshHeaders) diff --git a/src/Libraries/MeshWriter.h b/src/Libraries/MeshWriter.h index 1de609c..5f60edb 100644 --- a/src/Libraries/MeshWriter.h +++ b/src/Libraries/MeshWriter.h @@ -27,6 +27,10 @@ namespace SH_COMP static void WriteAnimData(FileReference file, AnimDataHeader const& header, AnimData const& data); static void WriteAnimNode(FileReference file, AnimNodeInfo const& info, AnimNode const& node); + static void WriteRigHeader(FileReference file, RigDataHeader const& header); + static void WriteRigData(FileReference file, RigDataHeader const& header, std::map const& data); + static void WriteRigNodes(FileReference file, RigDataHeader const& header, RigNode const* root); + static void WriteHeaders(FileReference file, ModelConstRef asset); static void WriteData(FileReference file, ModelConstRef asset);