Unravel Engine C++ Reference
Loading...
Searching...
No Matches
mesh_importer_meta.cpp
Go to the documentation of this file.
2
4
8
9namespace unravel
10{
11
13{
14 entt::meta_factory<mesh_importer_meta>{}
15 .type("mesh_importer_meta"_hs)
17 entt::attribute{"name", "mesh_importer_meta"},
18 entt::attribute{"pretty_name", "Mesh Importer Meta"},
19 })
20 .func<&mesh_importer_meta::get_meta_type>("get_meta_type"_hs)
21 .func<&mesh_importer_meta::get_static_meta_type>("get_static_meta_type"_hs)
22 .func<&mesh_importer_meta::as_derived>("as_derived"_hs);
23
24 // Register mesh_importer_meta::model_meta with entt
25 entt::meta_factory<mesh_importer_meta::model_meta>{}
26 .type("model_meta"_hs)
28 entt::attribute{"name", "model_meta"},
29 entt::attribute{"pretty_name", "Model Meta"},
30 })
31
32 .data<&mesh_importer_meta::model_meta::import_meshes>("import_meshes"_hs)
34 entt::attribute{"name", "import_meshes"},
35 entt::attribute{"pretty_name", "Import Meshes"},
36 })
37 .data<&mesh_importer_meta::model_meta::weld_vertices>("weld_vertices"_hs)
39 entt::attribute{"name", "weld_vertices"},
40 entt::attribute{"pretty_name", "Weld Vertices"},
41 entt::attribute{"tooltip",
42 "Identifies and joins identical vertex data sets within all imported meshes.\n"
43 "After this step is run, each mesh contains unique vertices,\n"
44 "so a vertex may be used by multiple faces. You usually want\n"
45 "to use this post processing step. If your application deals with\n"
46 "indexed geometry, this step is compulsory or you'll just waste rendering\n"
47 "time."},
48 })
49 .data<&mesh_importer_meta::model_meta::optimize_meshes>("optimize_meshes"_hs)
51 entt::attribute{"name", "optimize_meshes"},
52 entt::attribute{"pretty_name", "Optimize Meshes"},
53 entt::attribute{"tooltip",
54 "A post-processing step to reduce the number of meshes.\n"
55 "This will, in fact, reduce the number of draw calls."},
56 })
57 .data<&mesh_importer_meta::model_meta::split_large_meshes>("split_large_meshes"_hs)
59 entt::attribute{"name", "split_large_meshes"},
60 entt::attribute{"pretty_name", "Split Large Meshes"},
61 })
62 .data<&mesh_importer_meta::model_meta::find_degenerates>("find_degenerates"_hs)
64 entt::attribute{"name", "find_degenerates"},
65 entt::attribute{"pretty_name", "Find Degenerates"},
66 })
67 .data<&mesh_importer_meta::model_meta::find_invalid_data>("find_invalid_data"_hs)
69 entt::attribute{"name", "find_invalid_data"},
70 entt::attribute{"pretty_name", "Find Invalid Data"},
72 "tooltip",
73 "This step searches all meshes for invalid data, such as zeroed\n"
74 "normal vectors or invalid UV coords and removes/fixes them. This is\n"
75 "intended to get rid of some common exporter errors."},
76 })
77 .data<&mesh_importer_meta::model_meta::generate_lods>("generate_lods"_hs)
79 entt::attribute{"name", "generate_lods"},
80 entt::attribute{"pretty_name", "Generate LODs"},
81 entt::attribute{"tooltip",
82 "Enable automatic Level of Detail (LOD) generation during mesh compilation.\n"
83 "LODs are simplified versions of the mesh with fewer triangles for better\n"
84 "performance at distance. If disabled, only the base mesh will be available."},
85 })
86 .data<&mesh_importer_meta::model_meta::lod_target_error>("lod_target_error"_hs)
88 entt::attribute{"name", "lod_target_error"},
89 entt::attribute{"pretty_name", "LOD Target Error"},
90 entt::attribute{"tooltip", "Target error for LOD generation (lower = higher quality, higher = more aggressive)."},
91 entt::attribute{"min", 0.0f},
92 entt::attribute{"max", 1.0f},
93 entt::attribute{"step", 0.001f},
94 });
95
96 // Register mesh_importer_meta::rig_meta with entt
97 entt::meta_factory<mesh_importer_meta::rig_meta>{}
98 .type("rig_meta"_hs)
100 entt::attribute{"name", "rig_meta"},
101 entt::attribute{"pretty_name", "Rig Meta"},
102 });
103
104 // Register mesh_importer_meta::animations_meta with entt
105 entt::meta_factory<mesh_importer_meta::animations_meta>{}
106 .type("animations_meta"_hs)
108 entt::attribute{"name", "animations_meta"},
109 entt::attribute{"pretty_name", "Animations Meta"},
110 })
111 .data<&mesh_importer_meta::animations_meta::import_animations>("import_animations"_hs)
113 entt::attribute{"name", "import_animations"},
114 entt::attribute{"pretty_name", "Import Animations"},
115 });
116
117 // Register mesh_importer_meta::materials_meta with entt
118 entt::meta_factory<mesh_importer_meta::materials_meta>{}
119 .type("materials_meta"_hs)
121 entt::attribute{"name", "materials_meta"},
122 entt::attribute{"pretty_name", "Materials Meta"},
123 })
124 .data<&mesh_importer_meta::materials_meta::import_materials>("import_materials"_hs)
126 entt::attribute{"name", "import_materials"},
127 entt::attribute{"pretty_name", "Import Materials"},
128 })
129 .data<&mesh_importer_meta::materials_meta::remove_redundant_materials>("remove_redundant_materials"_hs)
131 entt::attribute{"name", "remove_redundant_materials"},
132 entt::attribute{"pretty_name", "Remove Redundant Materials"},
133 });
134
135 // Register mesh_importer_meta with entt
136 entt::meta_factory<mesh_importer_meta>{}
137 .type("mesh_importer_meta"_hs)
139 entt::attribute{"name", "mesh_importer_meta"},
140 entt::attribute{"pretty_name", "Mesh Importer Meta"},
141 })
142 .data<&mesh_importer_meta::model>("model"_hs)
144 entt::attribute{"name", "model"},
145 entt::attribute{"pretty_name", "Model"},
146 })
147 .data<&mesh_importer_meta::rig>("rig"_hs)
149 entt::attribute{"name", "rig"},
150 entt::attribute{"pretty_name", "Rig"},
151 })
152 .data<&mesh_importer_meta::animations>("animations"_hs)
154 entt::attribute{"name", "animations"},
155 entt::attribute{"pretty_name", "Animations"},
156 })
157 .data<&mesh_importer_meta::materials>("materials"_hs)
159 entt::attribute{"name", "materials"},
160 entt::attribute{"pretty_name", "Materials"},
161 });
162}
163
165{
166 try_save(ar, ser20::make_nvp("weld_vertices", obj.weld_vertices));
167 try_save(ar, ser20::make_nvp("optimize_meshes", obj.optimize_meshes));
168 try_save(ar, ser20::make_nvp("split_large_meshes", obj.split_large_meshes));
169 try_save(ar, ser20::make_nvp("find_degenerates", obj.find_degenerates));
170 try_save(ar, ser20::make_nvp("find_invalid_data", obj.find_invalid_data));
171 try_save(ar, ser20::make_nvp("generate_lods", obj.generate_lods));
172 try_save(ar, ser20::make_nvp("lod_target_error", obj.lod_target_error));
173}
176
178{
179 try_load(ar, ser20::make_nvp("weld_vertices", obj.weld_vertices));
180 try_load(ar, ser20::make_nvp("optimize_meshes", obj.optimize_meshes));
181 try_load(ar, ser20::make_nvp("split_large_meshes", obj.split_large_meshes));
182 try_load(ar, ser20::make_nvp("find_degenerates", obj.find_degenerates));
183 try_load(ar, ser20::make_nvp("find_invalid_data", obj.find_invalid_data));
184 try_load(ar, ser20::make_nvp("generate_lods", obj.generate_lods));
185 try_load(ar, ser20::make_nvp("lod_target_error", obj.lod_target_error));
186}
189
195
201
203{
204 try_save(ar, ser20::make_nvp("import_animations", obj.import_animations));
205}
208
210{
211 try_load(ar, ser20::make_nvp("import_animations", obj.import_animations));
212}
215
217{
218 try_save(ar, ser20::make_nvp("import_materials", obj.import_materials));
219 try_save(ar, ser20::make_nvp("remove_redundant_materials", obj.remove_redundant_materials));
220}
223
225{
226 try_load(ar, ser20::make_nvp("import_materials", obj.import_materials));
227 try_load(ar, ser20::make_nvp("remove_redundant_materials", obj.remove_redundant_materials));
228}
231
233{
234 try_save(ar, ser20::make_nvp("base_type", ser20::base_class<asset_importer_meta>(&obj)));
235 try_save(ar, ser20::make_nvp("model", obj.model));
236 try_save(ar, ser20::make_nvp("rig", obj.rig));
237 try_save(ar, ser20::make_nvp("animations", obj.animations));
238 try_save(ar, ser20::make_nvp("materials", obj.materials));
239}
242
244{
245 try_load(ar, ser20::make_nvp("base_type", ser20::base_class<asset_importer_meta>(&obj)));
246 try_load(ar, ser20::make_nvp("model", obj.model));
247 try_load(ar, ser20::make_nvp("rig", obj.rig));
248 try_load(ar, ser20::make_nvp("animations", obj.animations));
249 try_load(ar, ser20::make_nvp("materials", obj.materials));
250}
253
254} // namespace unravel
attributes::value_type attribute
Definition reflection.h:19
std::map< std::string, meta_any > attributes
Definition reflection.h:18
BinaryInputArchive iarchive_binary_t
simd::JSONOutputArchive oarchive_associative_t
BinaryOutputArchive oarchive_binary_t
simd::JSONInputArchive iarchive_associative_t
#define REFLECT(cls)
Definition reflection.h:149
#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
static auto get_static_meta_type() -> entt::meta_type