diff --git a/include/IMesh.h b/include/IMesh.h index 227ef509..3f3389b9 100644 --- a/include/IMesh.h +++ b/include/IMesh.h @@ -53,6 +53,9 @@ namespace scene //! Halflife MDL model file EAMT_MDL_HALFLIFE, + //! Graphics Language Transmission Format 2.0 (.gltf) mesh + EAMT_GLTF2, + //! generic skinned mesh EAMT_SKINNED, diff --git a/include/IrrCompileConfig.h b/include/IrrCompileConfig.h index fe1e29d1..f38d08b4 100644 --- a/include/IrrCompileConfig.h +++ b/include/IrrCompileConfig.h @@ -349,6 +349,12 @@ B3D, MS3D or X meshes */ #undef _IRR_COMPILE_WITH_OBJ_LOADER_ #endif +//! Define _IRR_COMPILE_WITH_GLTF_LOADER_ if you want to load glTF files +#define _IRR_COMPILE_WITH_GLTF_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_GLTF_LOADER_ +#undef _IRR_COMPILE_WITH_GLTF_LOADER_ +#endif + //! Define _IRR_COMPILE_WITH_BMP_LOADER_ if you want to load .bmp files //! Disabling this loader will also disable the built-in font #define _IRR_COMPILE_WITH_BMP_LOADER_ diff --git a/source/Irrlicht/CGLTFMeshFileLoader.cpp b/source/Irrlicht/CGLTFMeshFileLoader.cpp new file mode 100644 index 00000000..46dfc197 --- /dev/null +++ b/source/Irrlicht/CGLTFMeshFileLoader.cpp @@ -0,0 +1,31 @@ +#include "CGLTFMeshFileLoader.h" +#include "coreutil.h" +#include "IAnimatedMesh.h" +#include "IReadFile.h" +#include "path.h" + +namespace irr +{ + +namespace scene +{ + +CGLTFMeshFileLoader::CGLTFMeshFileLoader() +{ +} + +bool CGLTFMeshFileLoader::isALoadableFileExtension( + const io::path& filename) const +{ + return core::hasFileExtension(filename, "gltf"); +} + +IAnimatedMesh* CGLTFMeshFileLoader::createMesh(io::IReadFile* file) +{ + return nullptr; +} + +} // namespace irr + +} // namespace scene + diff --git a/source/Irrlicht/CGLTFMeshFileLoader.h b/source/Irrlicht/CGLTFMeshFileLoader.h new file mode 100644 index 00000000..87ca236f --- /dev/null +++ b/source/Irrlicht/CGLTFMeshFileLoader.h @@ -0,0 +1,31 @@ +#ifndef __C_GLTF_MESH_FILE_LOADER_INCLUDED__ +#define __C_GLTF_MESH_FILE_LOADER_INCLUDED__ + +#include "IAnimatedMesh.h" +#include "IMeshLoader.h" +#include "IReadFile.h" +#include "path.h" + +namespace irr +{ + +namespace scene +{ + +class CGLTFMeshFileLoader : public IMeshLoader +{ +public: + CGLTFMeshFileLoader(); + + bool isALoadableFileExtension(const io::path& filename) const override; + + IAnimatedMesh* createMesh(io::IReadFile* file) override; + +}; + +} // namespace scene + +} // namespace irr + +#endif // __C_GLTF_MESH_FILE_LOADER_INCLUDED__ + diff --git a/source/Irrlicht/CMakeLists.txt b/source/Irrlicht/CMakeLists.txt index a4127453..702c0a94 100644 --- a/source/Irrlicht/CMakeLists.txt +++ b/source/Irrlicht/CMakeLists.txt @@ -161,6 +161,7 @@ set(IRRMESHLOADER CB3DMeshFileLoader.cpp COBJMeshFileLoader.cpp CXMeshFileLoader.cpp + CGLTFMeshFileLoader.cpp ) add_library(IRRMESHOBJ OBJECT diff --git a/source/Irrlicht/CSceneManager.cpp b/source/Irrlicht/CSceneManager.cpp index 664e672d..40f553e3 100644 --- a/source/Irrlicht/CSceneManager.cpp +++ b/source/Irrlicht/CSceneManager.cpp @@ -33,6 +33,10 @@ #include "CB3DMeshFileLoader.h" #endif +#ifdef _IRR_COMPILE_WITH_GLTF_LOADER_ +#include "CGLTFMeshFileLoader.h" +#endif + #ifdef _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_ #include "CBillboardSceneNode.h" #endif // _IRR_COMPILE_WITH_BILLBOARD_SCENENODE_ @@ -105,6 +109,9 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs, #ifdef _IRR_COMPILE_WITH_B3D_LOADER_ MeshLoaderList.push_back(new CB3DMeshFileLoader(this)); #endif + #ifdef _IRR_COMPILE_WITH_GLTF_LOADER_ + MeshLoaderList.push_back(new CGLTFMeshFileLoader()); + #endif }