Unravel Engine C++ Reference
Loading...
Searching...
No Matches
mesh.cpp
Go to the documentation of this file.
1#include "mesh.hpp"
2
6
7#include <fstream>
10
12
13namespace bgfx
14{
15SAVE(VertexLayout)
16{
17 try_save(ar, ser20::make_nvp("hash", obj.m_hash));
18 try_save(ar, ser20::make_nvp("stride", obj.m_stride));
19 try_save(ar, ser20::make_nvp("offset", obj.m_offset));
20 try_save(ar, ser20::make_nvp("attributes", obj.m_attributes));
21}
24
25LOAD(VertexLayout)
26{
27 try_load(ar, ser20::make_nvp("hash", obj.m_hash));
28 try_load(ar, ser20::make_nvp("stride", obj.m_stride));
29 try_load(ar, ser20::make_nvp("offset", obj.m_offset));
30 try_load(ar, ser20::make_nvp("attributes", obj.m_attributes));
31}
34
35} // namespace bgfx
36
37namespace unravel
38{
40{
41 entt::meta_factory<mesh::info>{}
42 .type("info"_hs)
44 entt::attribute{"name", "info"},
45 })
46 .data<nullptr, &mesh::info::vertices>("vertices"_hs)
48 entt::attribute{"name", "vertices"},
49 entt::attribute{"pretty_name", "Vertices"},
50 entt::attribute{"tooltip", "Vertices count."},
51 })
52 .data<nullptr, &mesh::info::primitives>("primitives"_hs)
54 entt::attribute{"name", "primitives"},
55 entt::attribute{"pretty_name", "Primitives"},
56 entt::attribute{"tooltip", "Primitives count."},
57 })
58 .data<nullptr, &mesh::info::submeshes>("submeshes"_hs)
60 entt::attribute{"name", "submeshes"},
61 entt::attribute{"pretty_name", "Submeshes"},
62 entt::attribute{"tooltip", "submeshes count."},
63 })
64 .data<nullptr, &mesh::info::data_groups>("data_groups"_hs)
66 entt::attribute{"name", "data_groups"},
67 entt::attribute{"pretty_name", "Material Groups"},
68 entt::attribute{"tooltip", "Materials count."},
69 });
70}
71
73{
74 try_save(ar, ser20::make_nvp("data_group_id", obj.data_group_id));
75 try_save(ar, ser20::make_nvp("vertex_start", obj.vertex_start));
76 try_save(ar, ser20::make_nvp("vertex_count", obj.vertex_count));
77 try_save(ar, ser20::make_nvp("face_start", obj.face_start));
78 try_save(ar, ser20::make_nvp("face_count", obj.face_count));
79 try_save(ar, ser20::make_nvp("bbox", obj.bbox));
80 try_save(ar, ser20::make_nvp("node_id", obj.node_id));
81 try_save(ar, ser20::make_nvp("skinned", obj.skinned));
82
83}
86
88{
89 try_load(ar, ser20::make_nvp("data_group_id", obj.data_group_id));
90 try_load(ar, ser20::make_nvp("vertex_start", obj.vertex_start));
91 try_load(ar, ser20::make_nvp("vertex_count", obj.vertex_count));
92 try_load(ar, ser20::make_nvp("face_start", obj.face_start));
93 try_load(ar, ser20::make_nvp("face_count", obj.face_count));
94 try_load(ar, ser20::make_nvp("bbox", obj.bbox));
95 try_load(ar, ser20::make_nvp("node_id", obj.node_id));
96 try_load(ar, ser20::make_nvp("skinned", obj.skinned));
97
98
99}
102
104{
105 try_save(ar, ser20::make_nvp("data_group_id", obj.data_group_id));
106 try_save(ar, ser20::make_nvp("indices", obj.indices));
107 try_save(ar, ser20::make_nvp("flags", obj.flags));
108}
111
113{
114 try_load(ar, ser20::make_nvp("data_group_id", obj.data_group_id));
115 try_load(ar, ser20::make_nvp("indices", obj.indices));
116 try_load(ar, ser20::make_nvp("flags", obj.flags));
117}
120
122{
123 try_save(ar, ser20::make_nvp("vertex_index", obj.vertex_index));
124 try_save(ar, ser20::make_nvp("weight", obj.weight));
125}
128
130{
131 try_load(ar, ser20::make_nvp("vertex_index", obj.vertex_index));
132 try_load(ar, ser20::make_nvp("weight", obj.weight));
133}
136
138{
139 try_save(ar, ser20::make_nvp("bone_id", obj.bone_id));
140 try_save(ar, ser20::make_nvp("bind_pose_transform", obj.bind_pose_transform));
141 try_save(ar, ser20::make_nvp("influences", obj.influences));
142}
145
147{
148 try_load(ar, ser20::make_nvp("bone_id", obj.bone_id));
149 try_load(ar, ser20::make_nvp("bind_pose_transform", obj.bind_pose_transform));
150 try_load(ar, ser20::make_nvp("influences", obj.influences));
151}
154
156{
157 try_save(ar, ser20::make_nvp("bones", obj.get_bones()));
158}
161
163{
164 try_load(ar, ser20::make_nvp("bones", obj.get_bones()));
165}
168
170{
171 try_save(ar, ser20::make_nvp("name", obj.name));
172 try_save(ar, ser20::make_nvp("local_transform", obj.local_transform));
173 try_save(ar, ser20::make_nvp("children", obj.children));
174 try_save(ar, ser20::make_nvp("submeshes", obj.submeshes));
175 try_save(ar, ser20::make_nvp("index", obj.index));
176}
179
181{
182 try_load(ar, ser20::make_nvp("name", obj.name));
183 try_load(ar, ser20::make_nvp("local_transform", obj.local_transform));
184 try_load(ar, ser20::make_nvp("children", obj.children));
185 try_load(ar, ser20::make_nvp("submeshes", obj.submeshes));
186 try_load(ar, ser20::make_nvp("index", obj.index));
187}
190
192{
193 try_save(ar, ser20::make_nvp("vertex_format", obj.vertex_format));
194 try_save(ar, ser20::make_nvp("vertex_count", obj.vertex_count));
195 try_save(ar, ser20::make_nvp("vertex_data", obj.vertex_data));
196 try_save(ar, ser20::make_nvp("triangle_count", obj.triangle_count));
197 try_save(ar, ser20::make_nvp("triangle_data", obj.triangle_data));
198 try_save(ar, ser20::make_nvp("material_count", obj.material_count));
199 try_save(ar, ser20::make_nvp("submeshes", obj.submeshes));
200 try_save(ar, ser20::make_nvp("skin_data", obj.skin_data));
201 try_save(ar, ser20::make_nvp("root_node", obj.root_node));
202 try_save(ar, ser20::make_nvp("bbox", obj.bbox));
203
204}
207
209{
210 try_load(ar, ser20::make_nvp("vertex_format", obj.vertex_format));
211 try_load(ar, ser20::make_nvp("vertex_count", obj.vertex_count));
212 try_load(ar, ser20::make_nvp("vertex_data", obj.vertex_data));
213 try_load(ar, ser20::make_nvp("triangle_count", obj.triangle_count));
214 try_load(ar, ser20::make_nvp("triangle_data", obj.triangle_data));
215 try_load(ar, ser20::make_nvp("material_count", obj.material_count));
216 try_load(ar, ser20::make_nvp("submeshes", obj.submeshes));
217 try_load(ar, ser20::make_nvp("skin_data", obj.skin_data));
218 try_load(ar, ser20::make_nvp("root_node", obj.root_node));
219 try_load(ar, ser20::make_nvp("bbox", obj.bbox));
220
221}
224
225void save_to_file(const std::string& absolute_path, const mesh::load_data& obj)
226{
227 std::ofstream stream(absolute_path);
228 if(stream.good())
229 {
230 auto ar = ser20::create_oarchive_associative(stream);
231 try_save(ar, ser20::make_nvp("mesh", obj));
232 }
233}
234
235void save_to_file_bin(const std::string& absolute_path, const mesh::load_data& obj)
236{
237 std::ofstream stream(absolute_path, std::ios::binary);
238 if(stream.good())
239 {
240 ser20::oarchive_binary_t ar(stream);
241 try_save(ar, ser20::make_nvp("mesh", obj));
242 }
243}
244
245void load_from_file(const std::string& absolute_path, mesh::load_data& obj)
246{
247 std::ifstream stream(absolute_path);
248 if(stream.good())
249 {
250 auto ar = ser20::create_iarchive_associative(stream);
251 try_load(ar, ser20::make_nvp("mesh", obj));
252 }
253}
254
255void load_from_file_bin(const std::string& absolute_path, mesh::load_data& obj)
256{
257 std::ifstream stream(absolute_path, std::ios::binary);
258 if(stream.good())
259 {
260 ser20::iarchive_binary_t ar(stream);
261 try_load(ar, ser20::make_nvp("mesh", obj));
262 }
263}
264
265} // namespace unravel
Structure describing how a skinned mesh should be bound to any bones that influence its vertices.
Definition mesh.h:45
Definition mesh.cpp:14
attributes::value_type attribute
Definition reflection.h:19
std::map< std::string, meta_any > attributes
Definition reflection.h:18
auto create_oarchive_associative(std::ostream &stream)
BinaryInputArchive iarchive_binary_t
auto create_iarchive_associative(std::istream &stream)
simd::JSONOutputArchive oarchive_associative_t
BinaryOutputArchive oarchive_binary_t
simd::JSONInputArchive iarchive_associative_t
void save_to_file_bin(const std::string &absolute_path, const animation_clip &obj)
void load_from_file(const std::string &absolute_path, animation_clip &obj)
void save_to_file(const std::string &absolute_path, const animation_clip &obj)
void load_from_file_bin(const std::string &absolute_path, animation_clip &obj)
#define REFLECT(cls)
Definition reflection.h:133
#define SAVE_INSTANTIATE(cls, Archive)
#define LOAD(cls)
auto try_save(Archive &ar, ser20::NameValuePair< T > &&t, const hpp::source_location &loc=hpp::source_location::current()) -> bool
#define LOAD_INSTANTIATE(cls, Archive)
#define SAVE(cls)
auto try_load(Archive &ar, ser20::NameValuePair< T > &&t, const hpp::source_location &loc=hpp::source_location::current()) -> bool
Struct used for mesh construction.
Definition mesh.h:388
Structure describing an individual "piece" of the mesh, often grouped by material,...
Definition mesh.h:317
Structure describing data for a single triangle in the mesh.
Definition mesh.h:352
Describes the vertices that are connected to the referenced bone and how much influence it has on the...
Definition mesh.h:63
Describes how a bone influences a specific vertex.
Definition mesh.h:51