summaryrefslogtreecommitdiffhomepage
path: root/MagicEx/include
diff options
context:
space:
mode:
Diffstat (limited to 'MagicEx/include')
-rw-r--r--MagicEx/include/MagicLoad.h23
-rw-r--r--MagicEx/include/MagicLoad.inl.h32
-rw-r--r--MagicEx/include/ModelFile3DS.h27
-rw-r--r--MagicEx/include/ModelFileMAG.h31
-rw-r--r--MagicEx/include/ModelFileOBJ.h27
5 files changed, 140 insertions, 0 deletions
diff --git a/MagicEx/include/MagicLoad.h b/MagicEx/include/MagicLoad.h
new file mode 100644
index 0000000..f447945
--- /dev/null
+++ b/MagicEx/include/MagicLoad.h
@@ -0,0 +1,23 @@
+/* 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.
+*/
+
+#pragma once
+
+#include <windows.h>
+
+#include <filesystem>
+
+#include <Bitmap.h>
+#include <Solid.h>
+
+
+int LoadBuffer(const char* filename, BYTE*& buf, bool null_terminate=false);
+int LoadTexture(const char* name, Bitmap*& bmp, int type=0);
+int LoadAlpha(const char* name, Bitmap& bitmap, int type=0);
+template <typename ModelLoader> bool ImportInto(const std::filesystem::path& pathname, Solid* target);
+
+
+#include "MagicLoad.inl.h"
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);
+}
+
+
diff --git a/MagicEx/include/ModelFile3DS.h b/MagicEx/include/ModelFile3DS.h
new file mode 100644
index 0000000..e539d17
--- /dev/null
+++ b/MagicEx/include/ModelFile3DS.h
@@ -0,0 +1,27 @@
+/* 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.
+
+ AUTHOR: John DiCamillo
+
+
+ OVERVIEW
+ ========
+ File loader for 3DStudio MAX 3DS format models
+*/
+
+#pragma once
+
+#include <Solid.h>
+
+
+class ModelFile3DS : public ModelFile
+{
+public:
+ ModelFile3DS(const char* fname);
+ virtual ~ModelFile3DS();
+
+ virtual bool Load(Model* m, double scale=1.0);
+ virtual bool Save(Model* m);
+};
diff --git a/MagicEx/include/ModelFileMAG.h b/MagicEx/include/ModelFileMAG.h
new file mode 100644
index 0000000..e11d81c
--- /dev/null
+++ b/MagicEx/include/ModelFileMAG.h
@@ -0,0 +1,31 @@
+/* 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.
+
+ AUTHOR: John DiCamillo
+
+
+ OVERVIEW
+ ========
+ File loader for MAG format models
+*/
+
+#pragma once
+
+#include <Solid.h>
+
+
+class ModelFileMAG : public ModelFile
+{
+public:
+ ModelFileMAG(const char* fname);
+ virtual ~ModelFileMAG();
+
+ virtual bool Load(Model* m, double scale=1.0);
+ virtual bool Save(Model* m);
+
+protected:
+ virtual bool LoadMag5(FILE* fp, Model* m, double scale);
+ virtual bool LoadMag6(FILE* fp, Model* m, double scale);
+};
diff --git a/MagicEx/include/ModelFileOBJ.h b/MagicEx/include/ModelFileOBJ.h
new file mode 100644
index 0000000..3d9089c
--- /dev/null
+++ b/MagicEx/include/ModelFileOBJ.h
@@ -0,0 +1,27 @@
+/* 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.
+
+ AUTHOR: John DiCamillo
+
+
+ OVERVIEW
+ ========
+ File loader for Wavefront/OBJ format models
+*/
+
+#pragma once
+
+#include <Solid.h>
+
+
+class ModelFileOBJ : public ModelFile
+{
+public:
+ ModelFileOBJ(const char* fname);
+ virtual ~ModelFileOBJ();
+
+ virtual bool Load(Model* m, double scale=1.0);
+ virtual bool Save(Model* m);
+};