Pioneer
Loading...
Searching...
No Matches
BinaryConverter.h
Go to the documentation of this file.
1// Copyright © 2008-2024 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
23namespace Serializer {
24 class Reader;
25 class Writer;
26} // namespace Serializer
27
28namespace 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 // 7: Added discrete Tag node, tags are registered in the model hierarchy instead of at the root.
42 constexpr Uint32 SGM_VERSION = 7;
43
44 class BinaryConverter : public BaseLoader {
45 public:
47 void Save(const std::string &filename, Model *m);
48 void Save(const std::string &filename, const std::string &savepath, Model *m, const bool bInPlace);
49 Model *Load(const std::string &filename);
50 Model *Load(const std::string &filename, const std::string &path);
51 Model *Load(const std::string &filename, RefCountedPtr<FileSystem::FileData> binfile);
52
53 //if you implement any new node types, you must also register a loader function
54 //before calling Load.
55 void RegisterLoader(const std::string &typeName, std::function<Node *(NodeDatabase &)>);
56
57 private:
58 Model *CreateModel(const std::string &filename, Serializer::Reader &);
59 void SaveMaterials(Serializer::Writer &, Model *m);
60 void LoadMaterials(Serializer::Reader &);
61 void SaveAnimations(Serializer::Writer &, Model *m);
62 void LoadAnimations(Serializer::Reader &);
63 ModelDefinition FindModelDefinition(const std::string &);
64
65 Node *LoadNode(Serializer::Reader &);
66 //this is a very simple loader so it's implemented here
67 static Label3D *LoadLabel3D(NodeDatabase &);
68
69 bool m_patternsUsed;
70 std::map<std::string, std::function<Node *(NodeDatabase &)>> m_loaders;
71 };
72} // namespace SceneGraph
73
74#endif
Definition: Renderer.h:45
Definition: RefCounted.h:36
Definition: BaseLoader.h:17
Definition: BinaryConverter.h:44
void Save(const std::string &filename, Model *m)
Definition: BinaryConverter.cpp:75
void RegisterLoader(const std::string &typeName, std::function< Node *(NodeDatabase &)>)
Definition: BinaryConverter.cpp:70
Model * Load(const std::string &filename)
Definition: BinaryConverter.cpp:149
Definition: Label3D.h:23
Definition: Model.h:87
Definition: Node.h:75
Definition: Serializer.h:111
Definition: Serializer.h:36
Definition: CityOnPlanet.h:32
constexpr Uint32 SGM_VERSION
Definition: BinaryConverter.h:42
Definition: GeomTree.h:12
Definition: LoaderDefinitions.h:72
Definition: Node.h:66