diff options
Diffstat (limited to 'MagicEx/include')
-rw-r--r-- | MagicEx/include/MagicLoad.h | 23 | ||||
-rw-r--r-- | MagicEx/include/MagicLoad.inl.h | 32 | ||||
-rw-r--r-- | MagicEx/include/ModelFile3DS.h | 27 | ||||
-rw-r--r-- | MagicEx/include/ModelFileMAG.h | 31 | ||||
-rw-r--r-- | MagicEx/include/ModelFileOBJ.h | 27 |
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); +}; |