From 0391d91e5db3b3d0108b9851f09b4a556a57f59c Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sat, 9 Nov 2024 17:25:56 +0100 Subject: [PATCH] Improve error messages for failed mesh loading --- irr/src/CGLTFMeshFileLoader.cpp | 2 +- irr/src/CSceneManager.cpp | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/irr/src/CGLTFMeshFileLoader.cpp b/irr/src/CGLTFMeshFileLoader.cpp index e727b0410..fe67228a7 100644 --- a/irr/src/CGLTFMeshFileLoader.cpp +++ b/irr/src/CGLTFMeshFileLoader.cpp @@ -669,7 +669,7 @@ void SelfType::MeshExtractor::loadAnimation(const std::size_t animIdx) const auto &sampler = anim.samplers.at(channel.sampler); if (sampler.interpolation != tiniergltf::AnimationSampler::Interpolation::LINEAR) - throw std::runtime_error("unsupported interpolation"); + throw std::runtime_error("unsupported interpolation, only linear interpolation is supported"); const auto inputAccessor = Accessor::make(m_gltf_model, sampler.input); const auto n_frames = inputAccessor.getCount(); diff --git a/irr/src/CSceneManager.cpp b/irr/src/CSceneManager.cpp index c75a28a48..d75abc284 100644 --- a/irr/src/CSceneManager.cpp +++ b/irr/src/CSceneManager.cpp @@ -140,28 +140,29 @@ IAnimatedMesh *CSceneManager::getMesh(io::IReadFile *file) // load and create a mesh which we know already isn't in the cache and put it in there IAnimatedMesh *CSceneManager::getUncachedMesh(io::IReadFile *file, const io::path &filename, const io::path &cachename) { - IAnimatedMesh *msh = 0; - // iterate the list in reverse order so user-added loaders can override the built-in ones + + bool unsupported = true; for (auto it = MeshLoaderList.rbegin(); it != MeshLoaderList.rend(); it++) { if ((*it)->isALoadableFileExtension(filename)) { + unsupported = false; // reset file to avoid side effects of previous calls to createMesh file->seek(0); - msh = (*it)->createMesh(file); + IAnimatedMesh *msh = (*it)->createMesh(file); if (msh) { MeshCache->addMesh(cachename, msh); msh->drop(); - break; + os::Printer::log("Loaded mesh", filename, ELL_DEBUG); + return msh; } } } - if (!msh) - os::Printer::log("Could not load mesh, file format seems to be unsupported", filename, ELL_ERROR); - else - os::Printer::log("Loaded mesh", filename, ELL_DEBUG); - - return msh; + os::Printer::log(unsupported + ? "Could not load mesh, file format seems to be unsupported" + : "Attempt to load mesh failed", + filename, ELL_ERROR); + return nullptr; } //! returns the video driver