#pragma once #include "vde/mesh/halfedge_mesh.h" #include #include #include namespace vde::foundation { // Versioned binary format for fast save/load // Header: 8 bytes magic + 4 bytes version + 4 bytes flags constexpr uint64_t VDE_MAGIC = 0x56444547454F4D00ULL; // "VDEGEOM\0" constexpr uint32_t VDE_FORMAT_VERSION = 1; struct SerializedMesh { uint32_t vertex_count; uint32_t face_count; std::vector vertices; // xyz xyz ... (flat) std::vector face_indices; // v0 v1 v2 ... std::vector face_valence; // 3 for all triangles }; class BinarySerializer { public: /// Serialize mesh to binary buffer static std::vector serialize(const mesh::HalfedgeMesh& mesh); /// Deserialize mesh from binary buffer static mesh::HalfedgeMesh deserialize(const std::vector& data); /// Write to file static bool write_file(const std::string& path, const mesh::HalfedgeMesh& mesh); /// Read from file static mesh::HalfedgeMesh read_file(const std::string& path); }; } // namespace vde::foundation