1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
// SPDX-License-Identifier: BSD-3-Clause // Copyright (c) 2026 Fernando Sahmkow #pragma once #include <whiteout/models/wem/structures.h> #include "../../common/binary_reader.h" #include "chunk_tags.h" #include <vector> namespace whiteout { namespace models { namespace wem { /// Visitor that reads WEM binary data (index-table format) into the Model structure. class BinaryParseVisitor { public: explicit BinaryParseVisitor(common::BinaryReader& reader); /// Read the complete model from the current reader position. void read(Model& model); /// Issues encountered during parsing (non-fatal in Lenient mode). const std::vector<std::string>& getIssues() const { return issues; } protected: void visit(Model& model); void visit(TextureRef& tex); void visit(Material& mat); void visit(TextureSlot& slot); void visit(CompositeSection& sec); void visit(Mesh& mesh); void visit(Submesh& sub); template <typename T> void visit(std::vector<T>& container); void visit(std::string& str); void visitFresnel(FresnelProperties& f); std::vector<IndexEntry> indexTable; common::BinaryReader& reader; std::vector<std::string> issues; }; } // namespace wem } // namespace models } // namespace whiteout