Pioneer
Loading...
Searching...
No Matches
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
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 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 RefCounted.h:36
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
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