Pioneer
BinaryConverter.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _SCENEGRAPH_BINARYCONVERTER_H
5 #define _SCENEGRAPH_BINARYCONVERTER_H
6 
14 #include "BaseLoader.h"
15 #include "Billboard.h"
16 #include "CollisionGeometry.h"
17 #include "FileSystem.h"
18 #include "LOD.h"
19 #include "StaticGeometry.h"
20 #include "Thruster.h"
21 #include <functional>
22 
23 namespace Serializer {
24  class Reader;
25  class Writer;
26 } // namespace Serializer
27 
28 namespace SceneGraph {
29  class Label3D;
30  class Model;
31 
32  // Attempt at version history:
33  // 1: prototype
34  // 2: converted StaticMesh to VertexBuffer
35  // 3: store processed collision mesh
36  // 4: compressed SGM files and instancing support
37  // 5: normal mapping
38  // 6: 32-bit indicies
39  // 6.1: rewrote serialization, use lz4 compression instead of INFLATE/DEFLATE. Still compatible.
40  // 6.2: ignored StaticGeometry::m_blendMode in files. Still write blank value.
41  constexpr Uint32 SGM_VERSION = 6;
42 
43  class BinaryConverter : public BaseLoader {
44  public:
46  void Save(const std::string &filename, Model *m);
47  void Save(const std::string &filename, const std::string &savepath, Model *m, const bool bInPlace);
48  Model *Load(const std::string &filename);
49  Model *Load(const std::string &filename, const std::string &path);
50  Model *Load(const std::string &filename, RefCountedPtr<FileSystem::FileData> binfile);
51 
52  //if you implement any new node types, you must also register a loader function
53  //before calling Load.
54  void RegisterLoader(const std::string &typeName, std::function<Node *(NodeDatabase &)>);
55 
56  private:
57  Model *CreateModel(const std::string &filename, Serializer::Reader &);
58  void SaveMaterials(Serializer::Writer &, Model *m);
59  void LoadMaterials(Serializer::Reader &);
60  void SaveAnimations(Serializer::Writer &, Model *m);
61  void LoadAnimations(Serializer::Reader &);
62  ModelDefinition FindModelDefinition(const std::string &);
63 
64  Node *LoadNode(Serializer::Reader &);
65  //this is a very simple loader so it's implemented here
66  static Label3D *LoadLabel3D(NodeDatabase &);
67 
68  bool m_patternsUsed;
69  std::map<std::string, std::function<Node *(NodeDatabase &)>> m_loaders;
70  };
71 } // namespace SceneGraph
72 
73 #endif
Definition: Renderer.h:44
Definition: BaseLoader.h:18
Definition: BinaryConverter.h:43
void Save(const std::string &filename, Model *m)
Definition: BinaryConverter.cpp:73
void RegisterLoader(const std::string &typeName, std::function< Node *(NodeDatabase &)>)
Definition: BinaryConverter.cpp:68
Model * Load(const std::string &filename)
Definition: BinaryConverter.cpp:147
BinaryConverter(Graphics::Renderer *)
Definition: BinaryConverter.cpp:54
Definition: Label3D.h:21
Definition: Model.h:88
Definition: Node.h:72
Definition: Serializer.h:110
Definition: Serializer.h:35
Definition: CityOnPlanet.h:31
constexpr Uint32 SGM_VERSION
Definition: BinaryConverter.h:41
Definition: GeomTree.h:9
Definition: LoaderDefinitions.h:68
Definition: Node.h:63