Add support for importing both glTF and glTF2 files
parent
2ee7991558
commit
19876e9822
|
@ -181,6 +181,7 @@ corresponding preprocessor flag to selectively disable formats.
|
||||||
# include "AssbinLoader.h"
|
# include "AssbinLoader.h"
|
||||||
#endif
|
#endif
|
||||||
#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER
|
#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER
|
||||||
|
# include "glTFImporter.h"
|
||||||
# include "glTF2Importer.h"
|
# include "glTF2Importer.h"
|
||||||
#endif
|
#endif
|
||||||
#ifndef ASSIMP_BUILD_NO_C4D_IMPORTER
|
#ifndef ASSIMP_BUILD_NO_C4D_IMPORTER
|
||||||
|
@ -335,6 +336,7 @@ void GetImporterInstanceList(std::vector< BaseImporter* >& out)
|
||||||
out.push_back( new AssbinImporter() );
|
out.push_back( new AssbinImporter() );
|
||||||
#endif
|
#endif
|
||||||
#if ( !defined ASSIMP_BUILD_NO_GLTF_IMPORTER )
|
#if ( !defined ASSIMP_BUILD_NO_GLTF_IMPORTER )
|
||||||
|
out.push_back( new glTFImporter() );
|
||||||
out.push_back( new glTF2Importer() );
|
out.push_back( new glTF2Importer() );
|
||||||
#endif
|
#endif
|
||||||
#if ( !defined ASSIMP_BUILD_NO_C4D_IMPORTER )
|
#if ( !defined ASSIMP_BUILD_NO_C4D_IMPORTER )
|
||||||
|
|
|
@ -58,6 +58,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "glTF2Asset.h"
|
#include "glTF2Asset.h"
|
||||||
// This is included here so WriteLazyDict<T>'s definition is found.
|
// This is included here so WriteLazyDict<T>'s definition is found.
|
||||||
#include "glTF2AssetWriter.h"
|
#include "glTF2AssetWriter.h"
|
||||||
|
#include <rapidjson/document.h>
|
||||||
|
#include <rapidjson/rapidjson.h>
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
using namespace glTF2;
|
using namespace glTF2;
|
||||||
|
@ -100,24 +102,18 @@ const aiImporterDesc* glTF2Importer::GetInfo() const
|
||||||
|
|
||||||
bool glTF2Importer::CanRead(const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
|
bool glTF2Importer::CanRead(const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
|
||||||
{
|
{
|
||||||
const std::string& extension = GetExtension(pFile);
|
const std::string &extension = GetExtension(pFile);
|
||||||
|
|
||||||
if (extension == "gltf" || extension == "glb")
|
if (extension != "gltf") // We currently can't read glTF2 binary files (.glb)
|
||||||
return true;
|
return false;
|
||||||
|
|
||||||
if ((checkSig || !extension.length()) && pIOHandler) {
|
if (checkSig && pIOHandler) {
|
||||||
char buffer[4];
|
glTF2::Asset asset(pIOHandler);
|
||||||
|
try {
|
||||||
std::unique_ptr<IOStream> pStream(pIOHandler->Open(pFile));
|
asset.Load(pFile, extension == "glb");
|
||||||
if (pStream && pStream->Read(buffer, sizeof(buffer), 1) == 1) {
|
return asset.asset.version >= 2;
|
||||||
if (memcmp(buffer, AI_GLB_MAGIC_NUMBER, sizeof(buffer)) == 0) {
|
} catch (...) {
|
||||||
return true; // Has GLB header
|
return false;
|
||||||
}
|
|
||||||
else if (memcmp(buffer, "{\r\n ", sizeof(buffer)) == 0
|
|
||||||
|| memcmp(buffer, "{\n ", sizeof(buffer)) == 0) {
|
|
||||||
// seems a JSON file, and we're the only format that can read them
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1243,10 +1243,6 @@ inline void AssetMetadata::Read(Document& doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
version = std::max(statedVersion, version);
|
version = std::max(statedVersion, version);
|
||||||
if (version == 0) {
|
|
||||||
// if missing version, we'll assume version 1...
|
|
||||||
version = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version != 1) {
|
if (version != 1) {
|
||||||
char msg[128];
|
char msg[128];
|
||||||
|
|
|
@ -100,24 +100,18 @@ const aiImporterDesc* glTFImporter::GetInfo() const
|
||||||
|
|
||||||
bool glTFImporter::CanRead(const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
|
bool glTFImporter::CanRead(const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
|
||||||
{
|
{
|
||||||
const std::string& extension = GetExtension(pFile);
|
const std::string &extension = GetExtension(pFile);
|
||||||
|
|
||||||
if (extension == "gltf" || extension == "glb")
|
if (extension != "gltf" && extension != "glb")
|
||||||
return true;
|
return false;
|
||||||
|
|
||||||
if ((checkSig || !extension.length()) && pIOHandler) {
|
if (checkSig && pIOHandler) {
|
||||||
char buffer[4];
|
glTF::Asset asset(pIOHandler);
|
||||||
|
try {
|
||||||
std::unique_ptr<IOStream> pStream(pIOHandler->Open(pFile));
|
asset.Load(pFile, extension == "glb");
|
||||||
if (pStream && pStream->Read(buffer, sizeof(buffer), 1) == 1) {
|
return asset.asset.version < 2;
|
||||||
if (memcmp(buffer, AI_GLB_MAGIC_NUMBER, sizeof(buffer)) == 0) {
|
} catch (...) {
|
||||||
return true; // Has GLB header
|
return false;
|
||||||
}
|
|
||||||
else if (memcmp(buffer, "{\r\n ", sizeof(buffer)) == 0
|
|
||||||
|| memcmp(buffer, "{\n ", sizeof(buffer)) == 0) {
|
|
||||||
// seems a JSON file, and we're the only format that can read them
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue