From a2bdfdd05a6b3badbe4577092457c24054f27e71 Mon Sep 17 00:00:00 2001 From: Marco Feuerstein Date: Thu, 22 Jun 2023 13:58:51 +0200 Subject: [PATCH] Improve binary check for gltf and gltf2. By checking the magic token we don't depend on the extension any more and follow the official way to detect a gltf file as binary, see also https://github.com/KhronosGroup/glTF/blob/main/extensions/1.0/Khronos/KHR_binary_glTF/README.md#header and https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#binary-header. --- code/AssetLib/glTF/glTFImporter.cpp | 4 ++-- code/AssetLib/glTF2/glTF2Importer.cpp | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/code/AssetLib/glTF/glTFImporter.cpp b/code/AssetLib/glTF/glTFImporter.cpp index 61c11f594..db587ad69 100644 --- a/code/AssetLib/glTF/glTFImporter.cpp +++ b/code/AssetLib/glTF/glTFImporter.cpp @@ -93,7 +93,7 @@ const aiImporterDesc *glTFImporter::GetInfo() const { bool glTFImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /* checkSig */) const { glTF::Asset asset(pIOHandler); try { - asset.Load(pFile, GetExtension(pFile) == "glb"); + asset.Load(pFile, CheckMagicToken(pIOHandler, pFile, AI_GLB_MAGIC_NUMBER, AI_COUNT_OF(AI_GLB_MAGIC_NUMBER))); return asset.asset; } catch (...) { return false; @@ -697,7 +697,7 @@ void glTFImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOS // read the asset file glTF::Asset asset(pIOHandler); - asset.Load(pFile, GetExtension(pFile) == "glb"); + asset.Load(pFile, CheckMagicToken(pIOHandler, pFile, AI_GLB_MAGIC_NUMBER, AI_COUNT_OF(AI_GLB_MAGIC_NUMBER))); // // Copy the data out diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 942c63c85..6371d2bd5 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -112,7 +112,8 @@ bool glTF2Importer::CanRead(const std::string &filename, IOSystem *pIOHandler, b if (pIOHandler) { glTF2::Asset asset(pIOHandler); - return asset.CanRead(filename, extension == "glb"); + return asset.CanRead(filename, CheckMagicToken(pIOHandler, filename, AI_GLB_MAGIC_NUMBER, + AI_COUNT_OF(AI_GLB_MAGIC_NUMBER))); } return false; @@ -1678,7 +1679,7 @@ void glTF2Importer::InternReadFile(const std::string &pFile, aiScene *pScene, IO // read the asset file glTF2::Asset asset(pIOHandler, static_cast(mSchemaDocumentProvider)); - asset.Load(pFile, GetExtension(pFile) == "glb"); + asset.Load(pFile, CheckMagicToken(pIOHandler, pFile, AI_GLB_MAGIC_NUMBER, AI_COUNT_OF(AI_GLB_MAGIC_NUMBER))); if (asset.scene) { pScene->mName = asset.scene->name; }