summaryrefslogtreecommitdiffhomepage
path: root/MagicEx/include/MagicLoad.inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'MagicEx/include/MagicLoad.inl.h')
-rw-r--r--MagicEx/include/MagicLoad.inl.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/MagicEx/include/MagicLoad.inl.h b/MagicEx/include/MagicLoad.inl.h
new file mode 100644
index 0000000..e32ba60
--- /dev/null
+++ b/MagicEx/include/MagicLoad.inl.h
@@ -0,0 +1,32 @@
+/* Starshatter: The Open Source Project
+ Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
+ Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
+ Copyright (c) 1997-2006, Destroyer Studios LLC.
+*/
+
+#include <memory>
+
+#include <Solid.h>
+
+
+template <typename ModelLoader>
+bool
+ImportInto(const char* pathname, Solid* target)
+{
+ ModelLoader loader {pathname};
+ if (auto* original = target->GetModel()) {
+ auto solid = std::make_unique<Solid>();
+ if (!solid->Load(&loader))
+ return false;
+ auto* imported = solid->GetModel();
+ original->GetMaterials().append(imported->GetMaterials());
+ original->GetSurfaces().append(imported->GetSurfaces());
+ original->OptimizeMaterials();
+ imported->GetMaterials().clear();
+ imported->GetSurfaces().clear();
+ return true;
+ }
+ return target->Load(&loader);
+}
+
+