assimp: Sync with upstream 0201fc5
This commit is contained in:
parent
9d8a9ea826
commit
78b22393a8
224 changed files with 1922 additions and 1509 deletions
|
@ -102,7 +102,7 @@ License: Expat and Zlib
|
||||||
|
|
||||||
Files: ./thirdparty/assimp/
|
Files: ./thirdparty/assimp/
|
||||||
Comment: Open Asset Import Library (assimp)
|
Comment: Open Asset Import Library (assimp)
|
||||||
Copyright: 2006-2016, assimp team
|
Copyright: 2006-2020, assimp team
|
||||||
License: BSD-3-clause
|
License: BSD-3-clause
|
||||||
|
|
||||||
Files: ./thirdparty/basis_universal/
|
Files: ./thirdparty/basis_universal/
|
||||||
|
|
2
thirdparty/README.md
vendored
2
thirdparty/README.md
vendored
|
@ -9,7 +9,7 @@ Subcategories (`###` level) where needed are separated by a single empty line.
|
||||||
## assimp
|
## assimp
|
||||||
|
|
||||||
- Upstream: http://github.com/assimp/assimp
|
- Upstream: http://github.com/assimp/assimp
|
||||||
- Version: git (308db73d0b3c2d1870cd3e465eaa283692a4cf23, 2019)
|
- Version: git (0201fc57dca48910ca7f9fdf7457534ea6a57efc, 2020)
|
||||||
- License: BSD-3-Clause
|
- License: BSD-3-Clause
|
||||||
|
|
||||||
Files extracted from upstream source:
|
Files extracted from upstream source:
|
||||||
|
|
2
thirdparty/assimp/LICENSE
vendored
2
thirdparty/assimp/LICENSE
vendored
|
@ -1,6 +1,6 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
|
|
||||||
Copyright (c) 2006-2016, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
thirdparty/assimp/code/Common/Assimp.cpp
vendored
2
thirdparty/assimp/code/Common/Assimp.cpp
vendored
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ void BaseImporter::GetExtensionList(std::set<std::string>& extensions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<IOStream> pStream (pIOHandler->Open(pFile));
|
std::unique_ptr<IOStream> pStream (pIOHandler->Open(pFile));
|
||||||
if (pStream.get() ) {
|
if (pStream) {
|
||||||
// read 200 characters from the file
|
// read 200 characters from the file
|
||||||
std::unique_ptr<char[]> _buffer (new char[searchBytes+1 /* for the '\0' */]);
|
std::unique_ptr<char[]> _buffer (new char[searchBytes+1 /* for the '\0' */]);
|
||||||
char *buffer( _buffer.get() );
|
char *buffer( _buffer.get() );
|
||||||
|
@ -283,7 +283,6 @@ std::string BaseImporter::GetExtension( const std::string& file ) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// thanks to Andy Maloney for the hint
|
// thanks to Andy Maloney for the hint
|
||||||
std::string ret = file.substr( pos + 1 );
|
std::string ret = file.substr( pos + 1 );
|
||||||
std::transform( ret.begin(), ret.end(), ret.begin(), ToLower<char>);
|
std::transform( ret.begin(), ret.end(), ret.begin(), ToLower<char>);
|
||||||
|
@ -309,7 +308,7 @@ std::string BaseImporter::GetExtension( const std::string& file ) {
|
||||||
};
|
};
|
||||||
magic = reinterpret_cast<const char*>(_magic);
|
magic = reinterpret_cast<const char*>(_magic);
|
||||||
std::unique_ptr<IOStream> pStream (pIOHandler->Open(pFile));
|
std::unique_ptr<IOStream> pStream (pIOHandler->Open(pFile));
|
||||||
if (pStream.get() ) {
|
if (pStream) {
|
||||||
|
|
||||||
// skip to offset
|
// skip to offset
|
||||||
pStream->Seek(offset,aiOrigin_SET);
|
pStream->Seek(offset,aiOrigin_SET);
|
||||||
|
@ -603,7 +602,7 @@ unsigned int BatchLoader::AddLoadRequest(const std::string& file,
|
||||||
}
|
}
|
||||||
|
|
||||||
// no, we don't have it. So add it to the queue ...
|
// no, we don't have it. So add it to the queue ...
|
||||||
m_data->requests.push_back(LoadRequest(file,steps,map, m_data->next_id));
|
m_data->requests.emplace_back(file, steps, map, m_data->next_id);
|
||||||
return m_data->next_id++;
|
return m_data->next_id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
thirdparty/assimp/code/Common/BaseProcess.h
vendored
2
thirdparty/assimp/code/Common/BaseProcess.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/Common/Bitmap.cpp
vendored
2
thirdparty/assimp/code/Common/Bitmap.cpp
vendored
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2016 The Qt Company Ltd.
|
Copyright (C) 2016 The Qt Company Ltd.
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,6 +52,35 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
template<size_t sizeOfPointer>
|
||||||
|
size_t select_ftell(FILE* file)
|
||||||
|
{
|
||||||
|
return ::ftell(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<size_t sizeOfPointer>
|
||||||
|
int select_fseek(FILE* file, int64_t offset, int origin)
|
||||||
|
{
|
||||||
|
return ::fseek(file, static_cast<long>(offset), origin);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined _WIN32 && (!defined __GNUC__ || __MSVCRT_VERSION__ >= 0x0601)
|
||||||
|
template<>
|
||||||
|
size_t select_ftell<8>(FILE* file)
|
||||||
|
{
|
||||||
|
return ::_ftelli64(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
int select_fseek<8>(FILE* file, int64_t offset, int origin)
|
||||||
|
{
|
||||||
|
return ::_fseeki64(file, offset, origin);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
DefaultIOStream::~DefaultIOStream()
|
DefaultIOStream::~DefaultIOStream()
|
||||||
{
|
{
|
||||||
|
@ -93,7 +122,7 @@ aiReturn DefaultIOStream::Seek(size_t pOffset,
|
||||||
aiOrigin_END == SEEK_END && aiOrigin_SET == SEEK_SET");
|
aiOrigin_END == SEEK_END && aiOrigin_SET == SEEK_SET");
|
||||||
|
|
||||||
// do the seek
|
// do the seek
|
||||||
return (0 == ::fseek(mFile, (long)pOffset,(int)pOrigin) ? AI_SUCCESS : AI_FAILURE);
|
return (0 == select_fseek<sizeof(void*)>(mFile, (int64_t)pOffset,(int)pOrigin) ? AI_SUCCESS : AI_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
|
@ -102,7 +131,7 @@ size_t DefaultIOStream::Tell() const
|
||||||
if (!mFile) {
|
if (!mFile) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return ::ftell(mFile);
|
return select_ftell<sizeof(void*)>(mFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ LogStream* LogStream::createDefaultStream(aiDefaultLogStream streams,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Platform-independent default streams
|
// Platform-independent default streams
|
||||||
case aiDefaultLogStream_STDERR:
|
case aiDefaultLogStream_STDERR:
|
||||||
return new StdOStreamLogStream(std::cerr);
|
return new StdOStreamLogStream(std::cerr);
|
||||||
case aiDefaultLogStream_STDOUT:
|
case aiDefaultLogStream_STDOUT:
|
||||||
|
@ -121,7 +121,7 @@ LogStream* LogStream::createDefaultStream(aiDefaultLogStream streams,
|
||||||
};
|
};
|
||||||
|
|
||||||
// For compilers without dead code path detection
|
// For compilers without dead code path detection
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
134
thirdparty/assimp/code/Common/Exporter.cpp
vendored
134
thirdparty/assimp/code/Common/Exporter.cpp
vendored
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,100 +103,91 @@ void ExportSceneFBX(const char*, IOSystem*, const aiScene*, const ExportProperti
|
||||||
void ExportSceneFBXA(const char*, IOSystem*, const aiScene*, const ExportProperties*);
|
void ExportSceneFBXA(const char*, IOSystem*, const aiScene*, const ExportProperties*);
|
||||||
void ExportScene3MF( const char*, IOSystem*, const aiScene*, const ExportProperties* );
|
void ExportScene3MF( const char*, IOSystem*, const aiScene*, const ExportProperties* );
|
||||||
void ExportSceneM3D(const char*, IOSystem*, const aiScene*, const ExportProperties*);
|
void ExportSceneM3D(const char*, IOSystem*, const aiScene*, const ExportProperties*);
|
||||||
void ExportSceneA3D(const char*, IOSystem*, const aiScene*, const ExportProperties*);
|
void ExportSceneM3DA(const char*, IOSystem*, const aiScene*, const ExportProperties*);
|
||||||
void ExportAssimp2Json(const char* , IOSystem*, const aiScene* , const Assimp::ExportProperties*);
|
void ExportAssimp2Json(const char* , IOSystem*, const aiScene* , const Assimp::ExportProperties*);
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
// global array of all export formats which Assimp supports in its current build
|
static void setupExporterArray(std::vector<Exporter::ExportFormatEntry> &exporters) {
|
||||||
Exporter::ExportFormatEntry gExporters[] =
|
|
||||||
{
|
|
||||||
#ifndef ASSIMP_BUILD_NO_COLLADA_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_COLLADA_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "collada", "COLLADA - Digital Asset Exchange Schema", "dae", &ExportSceneCollada ),
|
exporters.push_back(Exporter::ExportFormatEntry("collada", "COLLADA - Digital Asset Exchange Schema", "dae", &ExportSceneCollada));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_X_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_X_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "x", "X Files", "x", &ExportSceneXFile,
|
exporters.push_back(Exporter::ExportFormatEntry("x", "X Files", "x", &ExportSceneXFile,
|
||||||
aiProcess_MakeLeftHanded | aiProcess_FlipWindingOrder | aiProcess_FlipUVs ),
|
aiProcess_MakeLeftHanded | aiProcess_FlipWindingOrder | aiProcess_FlipUVs));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_STEP_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_STEP_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "stp", "Step Files", "stp", &ExportSceneStep, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("stp", "Step Files", "stp", &ExportSceneStep, 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_OBJ_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_OBJ_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "obj", "Wavefront OBJ format", "obj", &ExportSceneObj,
|
exporters.push_back(Exporter::ExportFormatEntry("obj", "Wavefront OBJ format", "obj", &ExportSceneObj,
|
||||||
aiProcess_GenSmoothNormals /*| aiProcess_PreTransformVertices */ ),
|
aiProcess_GenSmoothNormals /*| aiProcess_PreTransformVertices */));
|
||||||
Exporter::ExportFormatEntry( "objnomtl", "Wavefront OBJ format without material file", "obj", &ExportSceneObjNoMtl,
|
exporters.push_back(Exporter::ExportFormatEntry("objnomtl", "Wavefront OBJ format without material file", "obj", &ExportSceneObjNoMtl,
|
||||||
aiProcess_GenSmoothNormals /*| aiProcess_PreTransformVertices */ ),
|
aiProcess_GenSmoothNormals /*| aiProcess_PreTransformVertices */));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_STL_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_STL_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "stl", "Stereolithography", "stl" , &ExportSceneSTL,
|
exporters.push_back(Exporter::ExportFormatEntry("stl", "Stereolithography", "stl", &ExportSceneSTL,
|
||||||
aiProcess_Triangulate | aiProcess_GenNormals | aiProcess_PreTransformVertices
|
aiProcess_Triangulate | aiProcess_GenNormals | aiProcess_PreTransformVertices));
|
||||||
),
|
exporters.push_back(Exporter::ExportFormatEntry("stlb", "Stereolithography (binary)", "stl", &ExportSceneSTLBinary,
|
||||||
Exporter::ExportFormatEntry( "stlb", "Stereolithography (binary)", "stl" , &ExportSceneSTLBinary,
|
aiProcess_Triangulate | aiProcess_GenNormals | aiProcess_PreTransformVertices));
|
||||||
aiProcess_Triangulate | aiProcess_GenNormals | aiProcess_PreTransformVertices
|
|
||||||
),
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_PLY_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_PLY_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "ply", "Stanford Polygon Library", "ply" , &ExportScenePly,
|
exporters.push_back(Exporter::ExportFormatEntry("ply", "Stanford Polygon Library", "ply", &ExportScenePly,
|
||||||
aiProcess_PreTransformVertices
|
aiProcess_PreTransformVertices));
|
||||||
),
|
exporters.push_back(Exporter::ExportFormatEntry("plyb", "Stanford Polygon Library (binary)", "ply", &ExportScenePlyBinary,
|
||||||
Exporter::ExportFormatEntry( "plyb", "Stanford Polygon Library (binary)", "ply", &ExportScenePlyBinary,
|
aiProcess_PreTransformVertices));
|
||||||
aiProcess_PreTransformVertices
|
|
||||||
),
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_3DS_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_3DS_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "3ds", "Autodesk 3DS (legacy)", "3ds" , &ExportScene3DS,
|
exporters.push_back(Exporter::ExportFormatEntry("3ds", "Autodesk 3DS (legacy)", "3ds", &ExportScene3DS,
|
||||||
aiProcess_Triangulate | aiProcess_SortByPType | aiProcess_JoinIdenticalVertices ),
|
aiProcess_Triangulate | aiProcess_SortByPType | aiProcess_JoinIdenticalVertices));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_GLTF_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_GLTF_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "gltf2", "GL Transmission Format v. 2", "gltf", &ExportSceneGLTF2,
|
exporters.push_back(Exporter::ExportFormatEntry("gltf2", "GL Transmission Format v. 2", "gltf", &ExportSceneGLTF2,
|
||||||
aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType ),
|
aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType));
|
||||||
Exporter::ExportFormatEntry( "glb2", "GL Transmission Format v. 2 (binary)", "glb", &ExportSceneGLB2,
|
exporters.push_back(Exporter::ExportFormatEntry("glb2", "GL Transmission Format v. 2 (binary)", "glb", &ExportSceneGLB2,
|
||||||
aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType ),
|
aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType));
|
||||||
Exporter::ExportFormatEntry( "gltf", "GL Transmission Format", "gltf", &ExportSceneGLTF,
|
exporters.push_back(Exporter::ExportFormatEntry("gltf", "GL Transmission Format", "gltf", &ExportSceneGLTF,
|
||||||
aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType ),
|
aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType));
|
||||||
Exporter::ExportFormatEntry( "glb", "GL Transmission Format (binary)", "glb", &ExportSceneGLB,
|
exporters.push_back(Exporter::ExportFormatEntry("glb", "GL Transmission Format (binary)", "glb", &ExportSceneGLB,
|
||||||
aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType ),
|
aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_ASSBIN_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_ASSBIN_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "assbin", "Assimp Binary File", "assbin" , &ExportSceneAssbin, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("assbin", "Assimp Binary File", "assbin", &ExportSceneAssbin, 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_ASSXML_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_ASSXML_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "assxml", "Assimp XML Document", "assxml" , &ExportSceneAssxml, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("assxml", "Assimp XML Document", "assxml", &ExportSceneAssxml, 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_X3D_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_X3D_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "x3d", "Extensible 3D", "x3d" , &ExportSceneX3D, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("x3d", "Extensible 3D", "x3d", &ExportSceneX3D, 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_FBX_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_FBX_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "fbx", "Autodesk FBX (binary)", "fbx", &ExportSceneFBX, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("fbx", "Autodesk FBX (binary)", "fbx", &ExportSceneFBX, 0));
|
||||||
Exporter::ExportFormatEntry( "fbxa", "Autodesk FBX (ascii)", "fbx", &ExportSceneFBXA, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("fbxa", "Autodesk FBX (ascii)", "fbx", &ExportSceneFBXA, 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_M3D_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_M3D_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "m3d", "Model 3D (binary)", "m3d", &ExportSceneM3D, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("m3d", "Model 3D (binary)", "m3d", &ExportSceneM3D, 0));
|
||||||
Exporter::ExportFormatEntry( "a3d", "Model 3D (ascii)", "m3d", &ExportSceneA3D, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("m3da", "Model 3D (ascii)", "a3d", &ExportSceneM3DA, 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_3MF_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_3MF_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "3mf", "The 3MF-File-Format", "3mf", &ExportScene3MF, 0 ),
|
exporters.push_back(Exporter::ExportFormatEntry("3mf", "The 3MF-File-Format", "3mf", &ExportScene3MF, 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_ASSJSON_EXPORTER
|
#ifndef ASSIMP_BUILD_NO_ASSJSON_EXPORTER
|
||||||
Exporter::ExportFormatEntry( "assjson", "Assimp JSON Document", "json", &ExportAssimp2Json, 0)
|
exporters.push_back(Exporter::ExportFormatEntry("assjson", "Assimp JSON Document", "json", &ExportAssimp2Json, 0));
|
||||||
#endif
|
#endif
|
||||||
};
|
}
|
||||||
|
|
||||||
#define ASSIMP_NUM_EXPORTERS (sizeof(gExporters)/sizeof(gExporters[0]))
|
|
||||||
|
|
||||||
|
|
||||||
class ExporterPimpl {
|
class ExporterPimpl {
|
||||||
public:
|
public:
|
||||||
|
@ -212,10 +203,7 @@ public:
|
||||||
GetPostProcessingStepInstanceList(mPostProcessingSteps);
|
GetPostProcessingStepInstanceList(mPostProcessingSteps);
|
||||||
|
|
||||||
// grab all built-in exporters
|
// grab all built-in exporters
|
||||||
if ( 0 != ( ASSIMP_NUM_EXPORTERS ) ) {
|
setupExporterArray(mExporters);
|
||||||
mExporters.resize( ASSIMP_NUM_EXPORTERS );
|
|
||||||
std::copy( gExporters, gExporters + ASSIMP_NUM_EXPORTERS, mExporters.begin() );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~ExporterPimpl() {
|
~ExporterPimpl() {
|
||||||
|
@ -259,24 +247,28 @@ Exporter :: Exporter()
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
Exporter::~Exporter() {
|
Exporter::~Exporter() {
|
||||||
FreeBlob();
|
ai_assert(nullptr != pimpl);
|
||||||
|
FreeBlob();
|
||||||
delete pimpl;
|
delete pimpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Exporter::SetIOHandler( IOSystem* pIOHandler) {
|
void Exporter::SetIOHandler( IOSystem* pIOHandler) {
|
||||||
pimpl->mIsDefaultIOHandler = !pIOHandler;
|
ai_assert(nullptr != pimpl);
|
||||||
|
pimpl->mIsDefaultIOHandler = !pIOHandler;
|
||||||
pimpl->mIOSystem.reset(pIOHandler);
|
pimpl->mIOSystem.reset(pIOHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
IOSystem* Exporter::GetIOHandler() const {
|
IOSystem* Exporter::GetIOHandler() const {
|
||||||
return pimpl->mIOSystem.get();
|
ai_assert(nullptr != pimpl);
|
||||||
|
return pimpl->mIOSystem.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
bool Exporter::IsDefaultIOHandler() const {
|
bool Exporter::IsDefaultIOHandler() const {
|
||||||
return pimpl->mIsDefaultIOHandler;
|
ai_assert(nullptr != pimpl);
|
||||||
|
return pimpl->mIsDefaultIOHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -302,6 +294,7 @@ void Exporter::SetProgressHandler(ProgressHandler* pHandler) {
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const char* pFormatId,
|
const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const char* pFormatId,
|
||||||
unsigned int pPreprocessing, const ExportProperties* pProperties) {
|
unsigned int pPreprocessing, const ExportProperties* pProperties) {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
if (pimpl->blob) {
|
if (pimpl->blob) {
|
||||||
delete pimpl->blob;
|
delete pimpl->blob;
|
||||||
pimpl->blob = nullptr;
|
pimpl->blob = nullptr;
|
||||||
|
@ -326,7 +319,7 @@ const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const cha
|
||||||
aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const char* pPath,
|
aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const char* pPath,
|
||||||
unsigned int pPreprocessing, const ExportProperties* pProperties) {
|
unsigned int pPreprocessing, const ExportProperties* pProperties) {
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
// when they create scenes from scratch, users will likely create them not in verbose
|
// when they create scenes from scratch, users will likely create them not in verbose
|
||||||
// format. They will likely not be aware that there is a flag in the scene to indicate
|
// format. They will likely not be aware that there is a flag in the scene to indicate
|
||||||
// this, however. To avoid surprises and bug reports, we check for duplicates in
|
// this, however. To avoid surprises and bug reports, we check for duplicates in
|
||||||
|
@ -452,8 +445,7 @@ aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const c
|
||||||
|
|
||||||
ExportProperties emptyProperties; // Never pass NULL ExportProperties so Exporters don't have to worry.
|
ExportProperties emptyProperties; // Never pass NULL ExportProperties so Exporters don't have to worry.
|
||||||
ExportProperties* pProp = pProperties ? (ExportProperties*)pProperties : &emptyProperties;
|
ExportProperties* pProp = pProperties ? (ExportProperties*)pProperties : &emptyProperties;
|
||||||
pProp->SetPropertyBool("bJoinIdenticalVertices", must_join_again);
|
pProp->SetPropertyBool("bJoinIdenticalVertices", pp & aiProcess_JoinIdenticalVertices);
|
||||||
exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProp);
|
|
||||||
exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProp);
|
exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProp);
|
||||||
|
|
||||||
pimpl->mProgressHandler->UpdateFileWrite(4, 4);
|
pimpl->mProgressHandler->UpdateFileWrite(4, 4);
|
||||||
|
@ -473,11 +465,13 @@ aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const c
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
const char* Exporter::GetErrorString() const {
|
const char* Exporter::GetErrorString() const {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
return pimpl->mError.c_str();
|
return pimpl->mError.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Exporter::FreeBlob() {
|
void Exporter::FreeBlob() {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
delete pimpl->blob;
|
delete pimpl->blob;
|
||||||
pimpl->blob = nullptr;
|
pimpl->blob = nullptr;
|
||||||
|
|
||||||
|
@ -486,30 +480,34 @@ void Exporter::FreeBlob() {
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
const aiExportDataBlob* Exporter::GetBlob() const {
|
const aiExportDataBlob* Exporter::GetBlob() const {
|
||||||
return pimpl->blob;
|
ai_assert(nullptr != pimpl);
|
||||||
|
return pimpl->blob;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
const aiExportDataBlob* Exporter::GetOrphanedBlob() const {
|
const aiExportDataBlob* Exporter::GetOrphanedBlob() const {
|
||||||
const aiExportDataBlob* tmp = pimpl->blob;
|
ai_assert(nullptr != pimpl);
|
||||||
|
const aiExportDataBlob *tmp = pimpl->blob;
|
||||||
pimpl->blob = nullptr;
|
pimpl->blob = nullptr;
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
size_t Exporter::GetExportFormatCount() const {
|
size_t Exporter::GetExportFormatCount() const {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
return pimpl->mExporters.size();
|
return pimpl->mExporters.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
const aiExportFormatDesc* Exporter::GetExportFormatDescription( size_t index ) const {
|
const aiExportFormatDesc* Exporter::GetExportFormatDescription( size_t index ) const {
|
||||||
if (index >= GetExportFormatCount()) {
|
ai_assert(nullptr != pimpl);
|
||||||
|
if (index >= GetExportFormatCount()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return from static storage if the requested index is built-in.
|
// Return from static storage if the requested index is built-in.
|
||||||
if (index < sizeof(gExporters) / sizeof(gExporters[0])) {
|
if (index < pimpl->mExporters.size()) {
|
||||||
return &gExporters[index].mDescription;
|
return &pimpl->mExporters[index].mDescription;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &pimpl->mExporters[index].mDescription;
|
return &pimpl->mExporters[index].mDescription;
|
||||||
|
@ -517,7 +515,8 @@ const aiExportFormatDesc* Exporter::GetExportFormatDescription( size_t index ) c
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
aiReturn Exporter::RegisterExporter(const ExportFormatEntry& desc) {
|
aiReturn Exporter::RegisterExporter(const ExportFormatEntry& desc) {
|
||||||
for(const ExportFormatEntry& e : pimpl->mExporters) {
|
ai_assert(nullptr != pimpl);
|
||||||
|
for (const ExportFormatEntry &e : pimpl->mExporters) {
|
||||||
if (!strcmp(e.mDescription.id,desc.mDescription.id)) {
|
if (!strcmp(e.mDescription.id,desc.mDescription.id)) {
|
||||||
return aiReturn_FAILURE;
|
return aiReturn_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -529,7 +528,8 @@ aiReturn Exporter::RegisterExporter(const ExportFormatEntry& desc) {
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void Exporter::UnregisterExporter(const char* id) {
|
void Exporter::UnregisterExporter(const char* id) {
|
||||||
for(std::vector<ExportFormatEntry>::iterator it = pimpl->mExporters.begin();
|
ai_assert(nullptr != pimpl);
|
||||||
|
for (std::vector<ExportFormatEntry>::iterator it = pimpl->mExporters.begin();
|
||||||
it != pimpl->mExporters.end(); ++it) {
|
it != pimpl->mExporters.end(); ++it) {
|
||||||
if (!strcmp((*it).mDescription.id,id)) {
|
if (!strcmp((*it).mDescription.id,id)) {
|
||||||
pimpl->mExporters.erase(it);
|
pimpl->mExporters.erase(it);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2008, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
|
292
thirdparty/assimp/code/Common/Importer.cpp
vendored
292
thirdparty/assimp/code/Common/Importer.cpp
vendored
|
@ -3,9 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -78,6 +76,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <assimp/TinyFormatter.h>
|
#include <assimp/TinyFormatter.h>
|
||||||
#include <assimp/Exceptional.h>
|
#include <assimp/Exceptional.h>
|
||||||
#include <assimp/Profiler.h>
|
#include <assimp/Profiler.h>
|
||||||
|
#include <assimp/commonMetaData.h>
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
|
@ -119,7 +119,7 @@ void* AllocateFromAssimpHeap::operator new ( size_t num_bytes, const std::nothro
|
||||||
return AllocateFromAssimpHeap::operator new( num_bytes );
|
return AllocateFromAssimpHeap::operator new( num_bytes );
|
||||||
}
|
}
|
||||||
catch( ... ) {
|
catch( ... ) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,9 +134,8 @@ void* AllocateFromAssimpHeap::operator new[] ( size_t num_bytes) {
|
||||||
void* AllocateFromAssimpHeap::operator new[] ( size_t num_bytes, const std::nothrow_t& ) throw() {
|
void* AllocateFromAssimpHeap::operator new[] ( size_t num_bytes, const std::nothrow_t& ) throw() {
|
||||||
try {
|
try {
|
||||||
return AllocateFromAssimpHeap::operator new[]( num_bytes );
|
return AllocateFromAssimpHeap::operator new[]( num_bytes );
|
||||||
}
|
} catch( ... ) {
|
||||||
catch( ... ) {
|
return nullptr;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,7 +147,7 @@ void AllocateFromAssimpHeap::operator delete[] ( void* data) {
|
||||||
// Importer constructor.
|
// Importer constructor.
|
||||||
Importer::Importer()
|
Importer::Importer()
|
||||||
: pimpl( new ImporterPimpl ) {
|
: pimpl( new ImporterPimpl ) {
|
||||||
pimpl->mScene = NULL;
|
pimpl->mScene = nullptr;
|
||||||
pimpl->mErrorString = "";
|
pimpl->mErrorString = "";
|
||||||
|
|
||||||
// Allocate a default IO handler
|
// Allocate a default IO handler
|
||||||
|
@ -174,14 +173,14 @@ Importer::Importer()
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Destructor of Importer
|
// Destructor of Importer
|
||||||
Importer::~Importer()
|
Importer::~Importer() {
|
||||||
{
|
|
||||||
// Delete all import plugins
|
// Delete all import plugins
|
||||||
DeleteImporterInstanceList(pimpl->mImporter);
|
DeleteImporterInstanceList(pimpl->mImporter);
|
||||||
|
|
||||||
// Delete all post-processing plug-ins
|
// Delete all post-processing plug-ins
|
||||||
for( unsigned int a = 0; a < pimpl->mPostProcessingSteps.size(); a++)
|
for( unsigned int a = 0; a < pimpl->mPostProcessingSteps.size(); ++a ) {
|
||||||
delete pimpl->mPostProcessingSteps[a];
|
delete pimpl->mPostProcessingSteps[a];
|
||||||
|
}
|
||||||
|
|
||||||
// Delete the assigned IO and progress handler
|
// Delete the assigned IO and progress handler
|
||||||
delete pimpl->mIOHandler;
|
delete pimpl->mIOHandler;
|
||||||
|
@ -199,9 +198,9 @@ Importer::~Importer()
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Register a custom post-processing step
|
// Register a custom post-processing step
|
||||||
aiReturn Importer::RegisterPPStep(BaseProcess* pImp)
|
aiReturn Importer::RegisterPPStep(BaseProcess* pImp) {
|
||||||
{
|
ai_assert( nullptr != pImp );
|
||||||
ai_assert(NULL != pImp);
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
|
||||||
pimpl->mPostProcessingSteps.push_back(pImp);
|
pimpl->mPostProcessingSteps.push_back(pImp);
|
||||||
|
@ -213,9 +212,9 @@ aiReturn Importer::RegisterPPStep(BaseProcess* pImp)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Register a custom loader plugin
|
// Register a custom loader plugin
|
||||||
aiReturn Importer::RegisterLoader(BaseImporter* pImp)
|
aiReturn Importer::RegisterLoader(BaseImporter* pImp) {
|
||||||
{
|
ai_assert(nullptr != pImp);
|
||||||
ai_assert(NULL != pImp);
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
|
@ -242,13 +241,13 @@ aiReturn Importer::RegisterLoader(BaseImporter* pImp)
|
||||||
pimpl->mImporter.push_back(pImp);
|
pimpl->mImporter.push_back(pImp);
|
||||||
ASSIMP_LOG_INFO_F("Registering custom importer for these file extensions: ", baked);
|
ASSIMP_LOG_INFO_F("Registering custom importer for these file extensions: ", baked);
|
||||||
ASSIMP_END_EXCEPTION_REGION(aiReturn);
|
ASSIMP_END_EXCEPTION_REGION(aiReturn);
|
||||||
|
|
||||||
return AI_SUCCESS;
|
return AI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Unregister a custom loader plugin
|
// Unregister a custom loader plugin
|
||||||
aiReturn Importer::UnregisterLoader(BaseImporter* pImp)
|
aiReturn Importer::UnregisterLoader(BaseImporter* pImp) {
|
||||||
{
|
|
||||||
if(!pImp) {
|
if(!pImp) {
|
||||||
// unregistering a NULL importer is no problem for us ... really!
|
// unregistering a NULL importer is no problem for us ... really!
|
||||||
return AI_SUCCESS;
|
return AI_SUCCESS;
|
||||||
|
@ -265,13 +264,13 @@ aiReturn Importer::UnregisterLoader(BaseImporter* pImp)
|
||||||
}
|
}
|
||||||
ASSIMP_LOG_WARN("Unable to remove custom importer: I can't find you ...");
|
ASSIMP_LOG_WARN("Unable to remove custom importer: I can't find you ...");
|
||||||
ASSIMP_END_EXCEPTION_REGION(aiReturn);
|
ASSIMP_END_EXCEPTION_REGION(aiReturn);
|
||||||
|
|
||||||
return AI_FAILURE;
|
return AI_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Unregister a custom loader plugin
|
// Unregister a custom loader plugin
|
||||||
aiReturn Importer::UnregisterPPStep(BaseProcess* pImp)
|
aiReturn Importer::UnregisterPPStep(BaseProcess* pImp) {
|
||||||
{
|
|
||||||
if(!pImp) {
|
if(!pImp) {
|
||||||
// unregistering a NULL ppstep is no problem for us ... really!
|
// unregistering a NULL ppstep is no problem for us ... really!
|
||||||
return AI_SUCCESS;
|
return AI_SUCCESS;
|
||||||
|
@ -288,24 +287,22 @@ aiReturn Importer::UnregisterPPStep(BaseProcess* pImp)
|
||||||
}
|
}
|
||||||
ASSIMP_LOG_WARN("Unable to remove custom post-processing step: I can't find you ..");
|
ASSIMP_LOG_WARN("Unable to remove custom post-processing step: I can't find you ..");
|
||||||
ASSIMP_END_EXCEPTION_REGION(aiReturn);
|
ASSIMP_END_EXCEPTION_REGION(aiReturn);
|
||||||
|
|
||||||
return AI_FAILURE;
|
return AI_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Supplies a custom IO handler to the importer to open and access files.
|
// Supplies a custom IO handler to the importer to open and access files.
|
||||||
void Importer::SetIOHandler( IOSystem* pIOHandler)
|
void Importer::SetIOHandler( IOSystem* pIOHandler) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
// If the new handler is zero, allocate a default IO implementation.
|
// If the new handler is zero, allocate a default IO implementation.
|
||||||
if (!pIOHandler)
|
if (!pIOHandler) {
|
||||||
{
|
|
||||||
// Release pointer in the possession of the caller
|
// Release pointer in the possession of the caller
|
||||||
pimpl->mIOHandler = new DefaultIOSystem();
|
pimpl->mIOHandler = new DefaultIOSystem();
|
||||||
pimpl->mIsDefaultHandler = true;
|
pimpl->mIsDefaultHandler = true;
|
||||||
}
|
} else if (pimpl->mIOHandler != pIOHandler) { // Otherwise register the custom handler
|
||||||
// Otherwise register the custom handler
|
|
||||||
else if (pimpl->mIOHandler != pIOHandler)
|
|
||||||
{
|
|
||||||
delete pimpl->mIOHandler;
|
delete pimpl->mIOHandler;
|
||||||
pimpl->mIOHandler = pIOHandler;
|
pimpl->mIOHandler = pIOHandler;
|
||||||
pimpl->mIsDefaultHandler = false;
|
pimpl->mIsDefaultHandler = false;
|
||||||
|
@ -316,29 +313,32 @@ void Importer::SetIOHandler( IOSystem* pIOHandler)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get the currently set IO handler
|
// Get the currently set IO handler
|
||||||
IOSystem* Importer::GetIOHandler() const {
|
IOSystem* Importer::GetIOHandler() const {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
return pimpl->mIOHandler;
|
return pimpl->mIOHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Check whether a custom IO handler is currently set
|
// Check whether a custom IO handler is currently set
|
||||||
bool Importer::IsDefaultIOHandler() const {
|
bool Importer::IsDefaultIOHandler() const {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
return pimpl->mIsDefaultHandler;
|
return pimpl->mIsDefaultHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Supplies a custom progress handler to get regular callbacks during importing
|
// Supplies a custom progress handler to get regular callbacks during importing
|
||||||
void Importer::SetProgressHandler ( ProgressHandler* pHandler ) {
|
void Importer::SetProgressHandler ( ProgressHandler* pHandler ) {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
|
||||||
// If the new handler is zero, allocate a default implementation.
|
// If the new handler is zero, allocate a default implementation.
|
||||||
if (!pHandler)
|
if (!pHandler) {
|
||||||
{
|
|
||||||
// Release pointer in the possession of the caller
|
// Release pointer in the possession of the caller
|
||||||
pimpl->mProgressHandler = new DefaultProgressHandler();
|
pimpl->mProgressHandler = new DefaultProgressHandler();
|
||||||
pimpl->mIsDefaultProgressHandler = true;
|
pimpl->mIsDefaultProgressHandler = true;
|
||||||
}
|
} else if (pimpl->mProgressHandler != pHandler) { // Otherwise register the custom handler
|
||||||
// Otherwise register the custom handler
|
|
||||||
else if (pimpl->mProgressHandler != pHandler)
|
|
||||||
{
|
|
||||||
delete pimpl->mProgressHandler;
|
delete pimpl->mProgressHandler;
|
||||||
pimpl->mProgressHandler = pHandler;
|
pimpl->mProgressHandler = pHandler;
|
||||||
pimpl->mIsDefaultProgressHandler = false;
|
pimpl->mIsDefaultProgressHandler = false;
|
||||||
|
@ -349,19 +349,22 @@ void Importer::SetProgressHandler ( ProgressHandler* pHandler ) {
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get the currently set progress handler
|
// Get the currently set progress handler
|
||||||
ProgressHandler* Importer::GetProgressHandler() const {
|
ProgressHandler* Importer::GetProgressHandler() const {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
return pimpl->mProgressHandler;
|
return pimpl->mProgressHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Check whether a custom progress handler is currently set
|
// Check whether a custom progress handler is currently set
|
||||||
bool Importer::IsDefaultProgressHandler() const {
|
bool Importer::IsDefaultProgressHandler() const {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
return pimpl->mIsDefaultProgressHandler;
|
return pimpl->mIsDefaultProgressHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Validate post process step flags
|
// Validate post process step flags
|
||||||
bool _ValidateFlags(unsigned int pFlags)
|
bool _ValidateFlags(unsigned int pFlags) {
|
||||||
{
|
|
||||||
if (pFlags & aiProcess_GenSmoothNormals && pFlags & aiProcess_GenNormals) {
|
if (pFlags & aiProcess_GenSmoothNormals && pFlags & aiProcess_GenNormals) {
|
||||||
ASSIMP_LOG_ERROR("#aiProcess_GenSmoothNormals and #aiProcess_GenNormals are incompatible");
|
ASSIMP_LOG_ERROR("#aiProcess_GenSmoothNormals and #aiProcess_GenNormals are incompatible");
|
||||||
return false;
|
return false;
|
||||||
|
@ -375,12 +378,13 @@ bool _ValidateFlags(unsigned int pFlags)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Free the current scene
|
// Free the current scene
|
||||||
void Importer::FreeScene( )
|
void Importer::FreeScene( ) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
|
||||||
delete pimpl->mScene;
|
delete pimpl->mScene;
|
||||||
pimpl->mScene = NULL;
|
pimpl->mScene = nullptr;
|
||||||
|
|
||||||
pimpl->mErrorString = "";
|
pimpl->mErrorString = "";
|
||||||
ASSIMP_END_EXCEPTION_REGION(void);
|
ASSIMP_END_EXCEPTION_REGION(void);
|
||||||
|
@ -388,44 +392,48 @@ void Importer::FreeScene( )
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get the current error string, if any
|
// Get the current error string, if any
|
||||||
const char* Importer::GetErrorString() const
|
const char* Importer::GetErrorString() const {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
/* Must remain valid as long as ReadFile() or FreeFile() are not called */
|
|
||||||
|
// Must remain valid as long as ReadFile() or FreeFile() are not called
|
||||||
return pimpl->mErrorString.c_str();
|
return pimpl->mErrorString.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Enable extra-verbose mode
|
// Enable extra-verbose mode
|
||||||
void Importer::SetExtraVerbose(bool bDo)
|
void Importer::SetExtraVerbose(bool bDo) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
pimpl->bExtraVerbose = bDo;
|
pimpl->bExtraVerbose = bDo;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get the current scene
|
// Get the current scene
|
||||||
const aiScene* Importer::GetScene() const
|
const aiScene* Importer::GetScene() const {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
return pimpl->mScene;
|
return pimpl->mScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Orphan the current scene and return it.
|
// Orphan the current scene and return it.
|
||||||
aiScene* Importer::GetOrphanedScene()
|
aiScene* Importer::GetOrphanedScene() {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
aiScene* s = pimpl->mScene;
|
aiScene* s = pimpl->mScene;
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
pimpl->mScene = NULL;
|
pimpl->mScene = nullptr;
|
||||||
|
|
||||||
pimpl->mErrorString = ""; /* reset error string */
|
pimpl->mErrorString = ""; // reset error string
|
||||||
ASSIMP_END_EXCEPTION_REGION(aiScene*);
|
ASSIMP_END_EXCEPTION_REGION(aiScene*);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Validate post-processing flags
|
// Validate post-processing flags
|
||||||
bool Importer::ValidateFlags(unsigned int pFlags) const
|
bool Importer::ValidateFlags(unsigned int pFlags) const {
|
||||||
{
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
// run basic checks for mutually exclusive flags
|
// run basic checks for mutually exclusive flags
|
||||||
if(!_ValidateFlags(pFlags)) {
|
if(!_ValidateFlags(pFlags)) {
|
||||||
|
@ -467,8 +475,9 @@ bool Importer::ValidateFlags(unsigned int pFlags) const
|
||||||
const aiScene* Importer::ReadFileFromMemory( const void* pBuffer,
|
const aiScene* Importer::ReadFileFromMemory( const void* pBuffer,
|
||||||
size_t pLength,
|
size_t pLength,
|
||||||
unsigned int pFlags,
|
unsigned int pFlags,
|
||||||
const char* pHint /*= ""*/)
|
const char* pHint /*= ""*/) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
if (!pHint) {
|
if (!pHint) {
|
||||||
pHint = "";
|
pHint = "";
|
||||||
|
@ -476,12 +485,12 @@ const aiScene* Importer::ReadFileFromMemory( const void* pBuffer,
|
||||||
|
|
||||||
if (!pBuffer || !pLength || strlen(pHint) > MaxLenHint ) {
|
if (!pBuffer || !pLength || strlen(pHint) > MaxLenHint ) {
|
||||||
pimpl->mErrorString = "Invalid parameters passed to ReadFileFromMemory()";
|
pimpl->mErrorString = "Invalid parameters passed to ReadFileFromMemory()";
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// prevent deletion of the previous IOHandler
|
// prevent deletion of the previous IOHandler
|
||||||
IOSystem* io = pimpl->mIOHandler;
|
IOSystem* io = pimpl->mIOHandler;
|
||||||
pimpl->mIOHandler = NULL;
|
pimpl->mIOHandler = nullptr;
|
||||||
|
|
||||||
SetIOHandler(new MemoryIOSystem((const uint8_t*)pBuffer,pLength,io));
|
SetIOHandler(new MemoryIOSystem((const uint8_t*)pBuffer,pLength,io));
|
||||||
|
|
||||||
|
@ -493,13 +502,13 @@ const aiScene* Importer::ReadFileFromMemory( const void* pBuffer,
|
||||||
ReadFile(fbuff,pFlags);
|
ReadFile(fbuff,pFlags);
|
||||||
SetIOHandler(io);
|
SetIOHandler(io);
|
||||||
|
|
||||||
ASSIMP_END_EXCEPTION_REGION(const aiScene*);
|
ASSIMP_END_EXCEPTION_REGION_WITH_ERROR_STRING(const aiScene*, pimpl->mErrorString);
|
||||||
return pimpl->mScene;
|
return pimpl->mScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void WriteLogOpening(const std::string& file)
|
void WriteLogOpening(const std::string& file) {
|
||||||
{
|
|
||||||
ASSIMP_LOG_INFO_F("Load ", file);
|
ASSIMP_LOG_INFO_F("Load ", file);
|
||||||
|
|
||||||
// print a full version dump. This is nice because we don't
|
// print a full version dump. This is nice because we don't
|
||||||
|
@ -550,8 +559,9 @@ void WriteLogOpening(const std::string& file)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Reads the given file and returns its contents if successful.
|
// Reads the given file and returns its contents if successful.
|
||||||
const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
|
const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
const std::string pFile(_pFile);
|
const std::string pFile(_pFile);
|
||||||
|
|
||||||
|
@ -580,7 +590,7 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
|
||||||
|
|
||||||
pimpl->mErrorString = "Unable to open file \"" + pFile + "\".";
|
pimpl->mErrorString = "Unable to open file \"" + pFile + "\".";
|
||||||
ASSIMP_LOG_ERROR(pimpl->mErrorString);
|
ASSIMP_LOG_ERROR(pimpl->mErrorString);
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Profiler> profiler(GetPropertyInteger(AI_CONFIG_GLOB_MEASURE_TIME,0)?new Profiler():NULL);
|
std::unique_ptr<Profiler> profiler(GetPropertyInteger(AI_CONFIG_GLOB_MEASURE_TIME,0)?new Profiler():NULL);
|
||||||
|
@ -589,7 +599,7 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find an worker class which can handle the file
|
// Find an worker class which can handle the file
|
||||||
BaseImporter* imp = NULL;
|
BaseImporter* imp = nullptr;
|
||||||
SetPropertyInteger("importerIndex", -1);
|
SetPropertyInteger("importerIndex", -1);
|
||||||
for( unsigned int a = 0; a < pimpl->mImporter.size(); a++) {
|
for( unsigned int a = 0; a < pimpl->mImporter.size(); a++) {
|
||||||
|
|
||||||
|
@ -617,7 +627,7 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
|
||||||
if( !imp) {
|
if( !imp) {
|
||||||
pimpl->mErrorString = "No suitable reader found for the file format of file \"" + pFile + "\".";
|
pimpl->mErrorString = "No suitable reader found for the file format of file \"" + pFile + "\".";
|
||||||
ASSIMP_LOG_ERROR(pimpl->mErrorString);
|
ASSIMP_LOG_ERROR(pimpl->mErrorString);
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -633,7 +643,7 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
|
||||||
// Dispatch the reading to the worker class for this format
|
// Dispatch the reading to the worker class for this format
|
||||||
const aiImporterDesc *desc( imp->GetInfo() );
|
const aiImporterDesc *desc( imp->GetInfo() );
|
||||||
std::string ext( "unknown" );
|
std::string ext( "unknown" );
|
||||||
if ( NULL != desc ) {
|
if ( nullptr != desc ) {
|
||||||
ext = desc->mName;
|
ext = desc->mName;
|
||||||
}
|
}
|
||||||
ASSIMP_LOG_INFO("Found a matching importer for this file format: " + ext + "." );
|
ASSIMP_LOG_INFO("Found a matching importer for this file format: " + ext + "." );
|
||||||
|
@ -654,15 +664,20 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
|
||||||
|
|
||||||
// If successful, apply all active post processing steps to the imported data
|
// If successful, apply all active post processing steps to the imported data
|
||||||
if( pimpl->mScene) {
|
if( pimpl->mScene) {
|
||||||
|
if (!pimpl->mScene->mMetaData || !pimpl->mScene->mMetaData->HasKey(AI_METADATA_SOURCE_FORMAT)) {
|
||||||
|
if (!pimpl->mScene->mMetaData) {
|
||||||
|
pimpl->mScene->mMetaData = new aiMetadata;
|
||||||
|
}
|
||||||
|
pimpl->mScene->mMetaData->Add(AI_METADATA_SOURCE_FORMAT, aiString(ext));
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
|
#ifndef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
|
||||||
// The ValidateDS process is an exception. It is executed first, even before ScenePreprocessor is called.
|
// The ValidateDS process is an exception. It is executed first, even before ScenePreprocessor is called.
|
||||||
if (pFlags & aiProcess_ValidateDataStructure)
|
if (pFlags & aiProcess_ValidateDataStructure) {
|
||||||
{
|
|
||||||
ValidateDSProcess ds;
|
ValidateDSProcess ds;
|
||||||
ds.ExecuteOnScene (this);
|
ds.ExecuteOnScene (this);
|
||||||
if (!pimpl->mScene) {
|
if (!pimpl->mScene) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // no validation
|
#endif // no validation
|
||||||
|
@ -695,8 +710,7 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef ASSIMP_CATCH_GLOBAL_EXCEPTIONS
|
#ifdef ASSIMP_CATCH_GLOBAL_EXCEPTIONS
|
||||||
catch (std::exception &e)
|
catch (std::exception &e) {
|
||||||
{
|
|
||||||
#if (defined _MSC_VER) && (defined _CPPRTTI)
|
#if (defined _MSC_VER) && (defined _CPPRTTI)
|
||||||
// if we have RTTI get the full name of the exception that occurred
|
// if we have RTTI get the full name of the exception that occurred
|
||||||
pimpl->mErrorString = std::string(typeid( e ).name()) + ": " + e.what();
|
pimpl->mErrorString = std::string(typeid( e ).name()) + ": " + e.what();
|
||||||
|
@ -705,24 +719,26 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ASSIMP_LOG_ERROR(pimpl->mErrorString);
|
ASSIMP_LOG_ERROR(pimpl->mErrorString);
|
||||||
delete pimpl->mScene; pimpl->mScene = NULL;
|
delete pimpl->mScene; pimpl->mScene = nullptr;
|
||||||
}
|
}
|
||||||
#endif // ! ASSIMP_CATCH_GLOBAL_EXCEPTIONS
|
#endif // ! ASSIMP_CATCH_GLOBAL_EXCEPTIONS
|
||||||
|
|
||||||
// either successful or failure - the pointer expresses it anyways
|
// either successful or failure - the pointer expresses it anyways
|
||||||
ASSIMP_END_EXCEPTION_REGION(const aiScene*);
|
ASSIMP_END_EXCEPTION_REGION_WITH_ERROR_STRING(const aiScene*, pimpl->mErrorString);
|
||||||
|
|
||||||
return pimpl->mScene;
|
return pimpl->mScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Apply post-processing to the currently bound scene
|
// Apply post-processing to the currently bound scene
|
||||||
const aiScene* Importer::ApplyPostProcessing(unsigned int pFlags)
|
const aiScene* Importer::ApplyPostProcessing(unsigned int pFlags) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
// Return immediately if no scene is active
|
// Return immediately if no scene is active
|
||||||
if (!pimpl->mScene) {
|
if (!pimpl->mScene) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no flags are given, return the current scene with no further action
|
// If no flags are given, return the current scene with no further action
|
||||||
|
@ -737,12 +753,11 @@ const aiScene* Importer::ApplyPostProcessing(unsigned int pFlags)
|
||||||
#ifndef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
|
#ifndef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
|
||||||
// The ValidateDS process plays an exceptional role. It isn't contained in the global
|
// The ValidateDS process plays an exceptional role. It isn't contained in the global
|
||||||
// list of post-processing steps, so we need to call it manually.
|
// list of post-processing steps, so we need to call it manually.
|
||||||
if (pFlags & aiProcess_ValidateDataStructure)
|
if (pFlags & aiProcess_ValidateDataStructure) {
|
||||||
{
|
|
||||||
ValidateDSProcess ds;
|
ValidateDSProcess ds;
|
||||||
ds.ExecuteOnScene (this);
|
ds.ExecuteOnScene (this);
|
||||||
if (!pimpl->mScene) {
|
if (!pimpl->mScene) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // no validation
|
#endif // no validation
|
||||||
|
@ -762,11 +777,9 @@ const aiScene* Importer::ApplyPostProcessing(unsigned int pFlags)
|
||||||
|
|
||||||
std::unique_ptr<Profiler> profiler(GetPropertyInteger(AI_CONFIG_GLOB_MEASURE_TIME,0)?new Profiler():NULL);
|
std::unique_ptr<Profiler> profiler(GetPropertyInteger(AI_CONFIG_GLOB_MEASURE_TIME,0)?new Profiler():NULL);
|
||||||
for( unsigned int a = 0; a < pimpl->mPostProcessingSteps.size(); a++) {
|
for( unsigned int a = 0; a < pimpl->mPostProcessingSteps.size(); a++) {
|
||||||
|
|
||||||
BaseProcess* process = pimpl->mPostProcessingSteps[a];
|
BaseProcess* process = pimpl->mPostProcessingSteps[a];
|
||||||
pimpl->mProgressHandler->UpdatePostProcess(static_cast<int>(a), static_cast<int>(pimpl->mPostProcessingSteps.size()) );
|
pimpl->mProgressHandler->UpdatePostProcess(static_cast<int>(a), static_cast<int>(pimpl->mPostProcessingSteps.size()) );
|
||||||
if( process->IsActive( pFlags)) {
|
if( process->IsActive( pFlags)) {
|
||||||
|
|
||||||
if (profiler) {
|
if (profiler) {
|
||||||
profiler->BeginRegion("postprocess");
|
profiler->BeginRegion("postprocess");
|
||||||
}
|
}
|
||||||
|
@ -803,24 +816,28 @@ const aiScene* Importer::ApplyPostProcessing(unsigned int pFlags)
|
||||||
static_cast<int>(pimpl->mPostProcessingSteps.size()) );
|
static_cast<int>(pimpl->mPostProcessingSteps.size()) );
|
||||||
|
|
||||||
// update private scene flags
|
// update private scene flags
|
||||||
if( pimpl->mScene )
|
if( pimpl->mScene ) {
|
||||||
ScenePriv(pimpl->mScene)->mPPStepsApplied |= pFlags;
|
ScenePriv(pimpl->mScene)->mPPStepsApplied |= pFlags;
|
||||||
|
}
|
||||||
|
|
||||||
// clear any data allocated by post-process steps
|
// clear any data allocated by post-process steps
|
||||||
pimpl->mPPShared->Clean();
|
pimpl->mPPShared->Clean();
|
||||||
ASSIMP_LOG_INFO("Leaving post processing pipeline");
|
ASSIMP_LOG_INFO("Leaving post processing pipeline");
|
||||||
|
|
||||||
ASSIMP_END_EXCEPTION_REGION(const aiScene*);
|
ASSIMP_END_EXCEPTION_REGION(const aiScene*);
|
||||||
|
|
||||||
return pimpl->mScene;
|
return pimpl->mScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
const aiScene* Importer::ApplyCustomizedPostProcessing( BaseProcess *rootProcess, bool requestValidation ) {
|
const aiScene* Importer::ApplyCustomizedPostProcessing( BaseProcess *rootProcess, bool requestValidation ) {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
|
||||||
// Return immediately if no scene is active
|
// Return immediately if no scene is active
|
||||||
if ( NULL == pimpl->mScene ) {
|
if ( nullptr == pimpl->mScene ) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no flags are given, return the current scene with no further action
|
// If no flags are given, return the current scene with no further action
|
||||||
|
@ -839,7 +856,7 @@ const aiScene* Importer::ApplyCustomizedPostProcessing( BaseProcess *rootProcess
|
||||||
ValidateDSProcess ds;
|
ValidateDSProcess ds;
|
||||||
ds.ExecuteOnScene( this );
|
ds.ExecuteOnScene( this );
|
||||||
if ( !pimpl->mScene ) {
|
if ( !pimpl->mScene ) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // no validation
|
#endif // no validation
|
||||||
|
@ -890,46 +907,50 @@ const aiScene* Importer::ApplyCustomizedPostProcessing( BaseProcess *rootProcess
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Helper function to check whether an extension is supported by ASSIMP
|
// Helper function to check whether an extension is supported by ASSIMP
|
||||||
bool Importer::IsExtensionSupported(const char* szExtension) const
|
bool Importer::IsExtensionSupported(const char* szExtension) const {
|
||||||
{
|
|
||||||
return nullptr != GetImporter(szExtension);
|
return nullptr != GetImporter(szExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
size_t Importer::GetImporterCount() const
|
size_t Importer::GetImporterCount() const {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
return pimpl->mImporter.size();
|
return pimpl->mImporter.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
const aiImporterDesc* Importer::GetImporterInfo(size_t index) const
|
const aiImporterDesc* Importer::GetImporterInfo(size_t index) const {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
if (index >= pimpl->mImporter.size()) {
|
if (index >= pimpl->mImporter.size()) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return pimpl->mImporter[index]->GetInfo();
|
return pimpl->mImporter[index]->GetInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
BaseImporter* Importer::GetImporter (size_t index) const
|
BaseImporter* Importer::GetImporter (size_t index) const {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
if (index >= pimpl->mImporter.size()) {
|
if (index >= pimpl->mImporter.size()) {
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return pimpl->mImporter[index];
|
return pimpl->mImporter[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Find a loader plugin for a given file extension
|
// Find a loader plugin for a given file extension
|
||||||
BaseImporter* Importer::GetImporter (const char* szExtension) const
|
BaseImporter* Importer::GetImporter (const char* szExtension) const {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
return GetImporter(GetImporterIndex(szExtension));
|
return GetImporter(GetImporterIndex(szExtension));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Find a loader plugin for a given file extension
|
// Find a loader plugin for a given file extension
|
||||||
size_t Importer::GetImporterIndex (const char* szExtension) const {
|
size_t Importer::GetImporterIndex (const char* szExtension) const {
|
||||||
|
ai_assert(nullptr != pimpl);
|
||||||
ai_assert(nullptr != szExtension);
|
ai_assert(nullptr != szExtension);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
@ -960,8 +981,9 @@ size_t Importer::GetImporterIndex (const char* szExtension) const {
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Helper function to build a list of all file extensions supported by ASSIMP
|
// Helper function to build a list of all file extensions supported by ASSIMP
|
||||||
void Importer::GetExtensionList(aiString& szOut) const
|
void Importer::GetExtensionList(aiString& szOut) const {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
std::set<std::string> str;
|
std::set<std::string> str;
|
||||||
for (std::vector<BaseImporter*>::const_iterator i = pimpl->mImporter.begin();i != pimpl->mImporter.end();++i) {
|
for (std::vector<BaseImporter*>::const_iterator i = pimpl->mImporter.begin();i != pimpl->mImporter.end();++i) {
|
||||||
|
@ -985,8 +1007,9 @@ void Importer::GetExtensionList(aiString& szOut) const
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Set a configuration property
|
// Set a configuration property
|
||||||
bool Importer::SetPropertyInteger(const char* szName, int iValue)
|
bool Importer::SetPropertyInteger(const char* szName, int iValue) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
bool existing;
|
bool existing;
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
existing = SetGenericProperty<int>(pimpl->mIntProperties, szName,iValue);
|
existing = SetGenericProperty<int>(pimpl->mIntProperties, szName,iValue);
|
||||||
|
@ -996,8 +1019,9 @@ bool Importer::SetPropertyInteger(const char* szName, int iValue)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Set a configuration property
|
// Set a configuration property
|
||||||
bool Importer::SetPropertyFloat(const char* szName, ai_real iValue)
|
bool Importer::SetPropertyFloat(const char* szName, ai_real iValue) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
bool existing;
|
bool existing;
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
existing = SetGenericProperty<ai_real>(pimpl->mFloatProperties, szName,iValue);
|
existing = SetGenericProperty<ai_real>(pimpl->mFloatProperties, szName,iValue);
|
||||||
|
@ -1007,8 +1031,9 @@ bool Importer::SetPropertyFloat(const char* szName, ai_real iValue)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Set a configuration property
|
// Set a configuration property
|
||||||
bool Importer::SetPropertyString(const char* szName, const std::string& value)
|
bool Importer::SetPropertyString(const char* szName, const std::string& value) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
bool existing;
|
bool existing;
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
existing = SetGenericProperty<std::string>(pimpl->mStringProperties, szName,value);
|
existing = SetGenericProperty<std::string>(pimpl->mStringProperties, szName,value);
|
||||||
|
@ -1018,8 +1043,9 @@ bool Importer::SetPropertyString(const char* szName, const std::string& value)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Set a configuration property
|
// Set a configuration property
|
||||||
bool Importer::SetPropertyMatrix(const char* szName, const aiMatrix4x4& value)
|
bool Importer::SetPropertyMatrix(const char* szName, const aiMatrix4x4& value) {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
bool existing;
|
bool existing;
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
existing = SetGenericProperty<aiMatrix4x4>(pimpl->mMatrixProperties, szName,value);
|
existing = SetGenericProperty<aiMatrix4x4>(pimpl->mMatrixProperties, szName,value);
|
||||||
|
@ -1029,40 +1055,43 @@ bool Importer::SetPropertyMatrix(const char* szName, const aiMatrix4x4& value)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get a configuration property
|
// Get a configuration property
|
||||||
int Importer::GetPropertyInteger(const char* szName,
|
int Importer::GetPropertyInteger(const char* szName, int iErrorReturn /*= 0xffffffff*/) const {
|
||||||
int iErrorReturn /*= 0xffffffff*/) const
|
ai_assert(nullptr != pimpl);
|
||||||
{
|
|
||||||
return GetGenericProperty<int>(pimpl->mIntProperties,szName,iErrorReturn);
|
return GetGenericProperty<int>(pimpl->mIntProperties,szName,iErrorReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get a configuration property
|
// Get a configuration property
|
||||||
ai_real Importer::GetPropertyFloat(const char* szName,
|
ai_real Importer::GetPropertyFloat(const char* szName, ai_real iErrorReturn /*= 10e10*/) const {
|
||||||
ai_real iErrorReturn /*= 10e10*/) const
|
ai_assert(nullptr != pimpl);
|
||||||
{
|
|
||||||
return GetGenericProperty<ai_real>(pimpl->mFloatProperties,szName,iErrorReturn);
|
return GetGenericProperty<ai_real>(pimpl->mFloatProperties,szName,iErrorReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get a configuration property
|
// Get a configuration property
|
||||||
const std::string Importer::GetPropertyString(const char* szName,
|
std::string Importer::GetPropertyString(const char* szName, const std::string& iErrorReturn /*= ""*/) const {
|
||||||
const std::string& iErrorReturn /*= ""*/) const
|
ai_assert(nullptr != pimpl);
|
||||||
{
|
|
||||||
return GetGenericProperty<std::string>(pimpl->mStringProperties,szName,iErrorReturn);
|
return GetGenericProperty<std::string>(pimpl->mStringProperties,szName,iErrorReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get a configuration property
|
// Get a configuration property
|
||||||
const aiMatrix4x4 Importer::GetPropertyMatrix(const char* szName,
|
aiMatrix4x4 Importer::GetPropertyMatrix(const char* szName, const aiMatrix4x4& iErrorReturn /*= aiMatrix4x4()*/) const {
|
||||||
const aiMatrix4x4& iErrorReturn /*= aiMatrix4x4()*/) const
|
ai_assert(nullptr != pimpl);
|
||||||
{
|
|
||||||
return GetGenericProperty<aiMatrix4x4>(pimpl->mMatrixProperties,szName,iErrorReturn);
|
return GetGenericProperty<aiMatrix4x4>(pimpl->mMatrixProperties,szName,iErrorReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get the memory requirements of a single node
|
// Get the memory requirements of a single node
|
||||||
inline void AddNodeWeight(unsigned int& iScene,const aiNode* pcNode)
|
inline
|
||||||
{
|
void AddNodeWeight(unsigned int& iScene,const aiNode* pcNode) {
|
||||||
|
if ( nullptr == pcNode ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
iScene += sizeof(aiNode);
|
iScene += sizeof(aiNode);
|
||||||
iScene += sizeof(unsigned int) * pcNode->mNumMeshes;
|
iScene += sizeof(unsigned int) * pcNode->mNumMeshes;
|
||||||
iScene += sizeof(void*) * pcNode->mNumChildren;
|
iScene += sizeof(void*) * pcNode->mNumChildren;
|
||||||
|
@ -1074,21 +1103,20 @@ inline void AddNodeWeight(unsigned int& iScene,const aiNode* pcNode)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get the memory requirements of the scene
|
// Get the memory requirements of the scene
|
||||||
void Importer::GetMemoryRequirements(aiMemoryInfo& in) const
|
void Importer::GetMemoryRequirements(aiMemoryInfo& in) const {
|
||||||
{
|
ai_assert(nullptr != pimpl);
|
||||||
|
|
||||||
in = aiMemoryInfo();
|
in = aiMemoryInfo();
|
||||||
aiScene* mScene = pimpl->mScene;
|
aiScene* mScene = pimpl->mScene;
|
||||||
|
|
||||||
// return if we have no scene loaded
|
// return if we have no scene loaded
|
||||||
if (!pimpl->mScene)
|
if (!mScene)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
in.total = sizeof(aiScene);
|
in.total = sizeof(aiScene);
|
||||||
|
|
||||||
// add all meshes
|
// add all meshes
|
||||||
for (unsigned int i = 0; i < mScene->mNumMeshes;++i)
|
for (unsigned int i = 0; i < mScene->mNumMeshes;++i) {
|
||||||
{
|
|
||||||
in.meshes += sizeof(aiMesh);
|
in.meshes += sizeof(aiMesh);
|
||||||
if (mScene->mMeshes[i]->HasPositions()) {
|
if (mScene->mMeshes[i]->HasPositions()) {
|
||||||
in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices;
|
in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices;
|
||||||
|
@ -1105,14 +1133,16 @@ void Importer::GetMemoryRequirements(aiMemoryInfo& in) const
|
||||||
for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS;++a) {
|
for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS;++a) {
|
||||||
if (mScene->mMeshes[i]->HasVertexColors(a)) {
|
if (mScene->mMeshes[i]->HasVertexColors(a)) {
|
||||||
in.meshes += sizeof(aiColor4D) * mScene->mMeshes[i]->mNumVertices;
|
in.meshes += sizeof(aiColor4D) * mScene->mMeshes[i]->mNumVertices;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else break;
|
|
||||||
}
|
}
|
||||||
for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS;++a) {
|
for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS;++a) {
|
||||||
if (mScene->mMeshes[i]->HasTextureCoords(a)) {
|
if (mScene->mMeshes[i]->HasTextureCoords(a)) {
|
||||||
in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices;
|
in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else break;
|
|
||||||
}
|
}
|
||||||
if (mScene->mMeshes[i]->HasBones()) {
|
if (mScene->mMeshes[i]->HasBones()) {
|
||||||
in.meshes += sizeof(void*) * mScene->mMeshes[i]->mNumBones;
|
in.meshes += sizeof(void*) * mScene->mMeshes[i]->mNumBones;
|
||||||
|
@ -1131,8 +1161,9 @@ void Importer::GetMemoryRequirements(aiMemoryInfo& in) const
|
||||||
in.textures += sizeof(aiTexture);
|
in.textures += sizeof(aiTexture);
|
||||||
if (pc->mHeight) {
|
if (pc->mHeight) {
|
||||||
in.textures += 4 * pc->mHeight * pc->mWidth;
|
in.textures += 4 * pc->mHeight * pc->mWidth;
|
||||||
|
} else {
|
||||||
|
in.textures += pc->mWidth;
|
||||||
}
|
}
|
||||||
else in.textures += pc->mWidth;
|
|
||||||
}
|
}
|
||||||
in.total += in.textures;
|
in.total += in.textures;
|
||||||
|
|
||||||
|
@ -1170,5 +1201,6 @@ void Importer::GetMemoryRequirements(aiMemoryInfo& in) const
|
||||||
in.materials += pc->mProperties[a]->mDataLength;
|
in.materials += pc->mProperties[a]->mDataLength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
in.total += in.materials;
|
in.total += in.materials;
|
||||||
}
|
}
|
||||||
|
|
2
thirdparty/assimp/code/Common/Importer.h
vendored
2
thirdparty/assimp/code/Common/Importer.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
thirdparty/assimp/code/Common/PolyTools.h
vendored
2
thirdparty/assimp/code/Common/PolyTools.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -1312,7 +1312,6 @@ void SceneCombiner::Copy(aiMetadata** _dest, const aiMetadata* src) {
|
||||||
aiMetadata* dest = *_dest = aiMetadata::Alloc( src->mNumProperties );
|
aiMetadata* dest = *_dest = aiMetadata::Alloc( src->mNumProperties );
|
||||||
std::copy(src->mKeys, src->mKeys + src->mNumProperties, dest->mKeys);
|
std::copy(src->mKeys, src->mKeys + src->mNumProperties, dest->mKeys);
|
||||||
|
|
||||||
dest->mValues = new aiMetadataEntry[src->mNumProperties];
|
|
||||||
for (unsigned int i = 0; i < src->mNumProperties; ++i) {
|
for (unsigned int i = 0; i < src->mNumProperties; ++i) {
|
||||||
aiMetadataEntry& in = src->mValues[i];
|
aiMetadataEntry& in = src->mValues[i];
|
||||||
aiMetadataEntry& out = dest->mValues[i];
|
aiMetadataEntry& out = dest->mValues[i];
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -217,6 +217,7 @@ void ScenePreprocessor::ProcessAnimation (aiAnimation* anim)
|
||||||
|
|
||||||
// No rotation keys? Generate a dummy track
|
// No rotation keys? Generate a dummy track
|
||||||
if (!channel->mNumRotationKeys) {
|
if (!channel->mNumRotationKeys) {
|
||||||
|
ai_assert(!channel->mRotationKeys);
|
||||||
channel->mNumRotationKeys = 1;
|
channel->mNumRotationKeys = 1;
|
||||||
channel->mRotationKeys = new aiQuatKey[1];
|
channel->mRotationKeys = new aiQuatKey[1];
|
||||||
aiQuatKey& q = channel->mRotationKeys[0];
|
aiQuatKey& q = channel->mRotationKeys[0];
|
||||||
|
@ -225,10 +226,13 @@ void ScenePreprocessor::ProcessAnimation (aiAnimation* anim)
|
||||||
q.mValue = rotation;
|
q.mValue = rotation;
|
||||||
|
|
||||||
ASSIMP_LOG_DEBUG("ScenePreprocessor: Dummy rotation track has been generated");
|
ASSIMP_LOG_DEBUG("ScenePreprocessor: Dummy rotation track has been generated");
|
||||||
|
} else {
|
||||||
|
ai_assert(channel->mRotationKeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
// No scaling keys? Generate a dummy track
|
// No scaling keys? Generate a dummy track
|
||||||
if (!channel->mNumScalingKeys) {
|
if (!channel->mNumScalingKeys) {
|
||||||
|
ai_assert(!channel->mScalingKeys);
|
||||||
channel->mNumScalingKeys = 1;
|
channel->mNumScalingKeys = 1;
|
||||||
channel->mScalingKeys = new aiVectorKey[1];
|
channel->mScalingKeys = new aiVectorKey[1];
|
||||||
aiVectorKey& q = channel->mScalingKeys[0];
|
aiVectorKey& q = channel->mScalingKeys[0];
|
||||||
|
@ -237,10 +241,13 @@ void ScenePreprocessor::ProcessAnimation (aiAnimation* anim)
|
||||||
q.mValue = scaling;
|
q.mValue = scaling;
|
||||||
|
|
||||||
ASSIMP_LOG_DEBUG("ScenePreprocessor: Dummy scaling track has been generated");
|
ASSIMP_LOG_DEBUG("ScenePreprocessor: Dummy scaling track has been generated");
|
||||||
|
} else {
|
||||||
|
ai_assert(channel->mScalingKeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
// No position keys? Generate a dummy track
|
// No position keys? Generate a dummy track
|
||||||
if (!channel->mNumPositionKeys) {
|
if (!channel->mNumPositionKeys) {
|
||||||
|
ai_assert(!channel->mPositionKeys);
|
||||||
channel->mNumPositionKeys = 1;
|
channel->mNumPositionKeys = 1;
|
||||||
channel->mPositionKeys = new aiVectorKey[1];
|
channel->mPositionKeys = new aiVectorKey[1];
|
||||||
aiVectorKey& q = channel->mPositionKeys[0];
|
aiVectorKey& q = channel->mPositionKeys[0];
|
||||||
|
@ -249,6 +256,8 @@ void ScenePreprocessor::ProcessAnimation (aiAnimation* anim)
|
||||||
q.mValue = position;
|
q.mValue = position;
|
||||||
|
|
||||||
ASSIMP_LOG_DEBUG("ScenePreprocessor: Dummy position track has been generated");
|
ASSIMP_LOG_DEBUG("ScenePreprocessor: Dummy position track has been generated");
|
||||||
|
} else {
|
||||||
|
ai_assert(channel->mPositionKeys);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/Common/ScenePrivate.h
vendored
2
thirdparty/assimp/code/Common/ScenePrivate.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -51,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <assimp/TinyFormatter.h>
|
#include <assimp/TinyFormatter.h>
|
||||||
|
#include <assimp/Exceptional.h>
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
using namespace Assimp::Formatter;
|
using namespace Assimp::Formatter;
|
||||||
|
@ -94,7 +95,10 @@ void SplitByBoneCountProcess::Execute( aiScene* pScene)
|
||||||
bool isNecessary = false;
|
bool isNecessary = false;
|
||||||
for( unsigned int a = 0; a < pScene->mNumMeshes; ++a)
|
for( unsigned int a = 0; a < pScene->mNumMeshes; ++a)
|
||||||
if( pScene->mMeshes[a]->mNumBones > mMaxBoneCount )
|
if( pScene->mMeshes[a]->mNumBones > mMaxBoneCount )
|
||||||
|
{
|
||||||
isNecessary = true;
|
isNecessary = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if( !isNecessary )
|
if( !isNecessary )
|
||||||
{
|
{
|
||||||
|
@ -155,7 +159,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
{
|
{
|
||||||
// skip if not necessary
|
// skip if not necessary
|
||||||
if( pMesh->mNumBones <= mMaxBoneCount )
|
if( pMesh->mNumBones <= mMaxBoneCount )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// necessary optimisation: build a list of all affecting bones for each vertex
|
// necessary optimisation: build a list of all affecting bones for each vertex
|
||||||
// TODO: (thom) maybe add a custom allocator here to avoid allocating tens of thousands of small arrays
|
// TODO: (thom) maybe add a custom allocator here to avoid allocating tens of thousands of small arrays
|
||||||
|
@ -165,7 +171,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
{
|
{
|
||||||
const aiBone* bone = pMesh->mBones[a];
|
const aiBone* bone = pMesh->mBones[a];
|
||||||
for( unsigned int b = 0; b < bone->mNumWeights; ++b)
|
for( unsigned int b = 0; b < bone->mNumWeights; ++b)
|
||||||
|
{
|
||||||
vertexBones[ bone->mWeights[b].mVertexId ].push_back( BoneWeight( a, bone->mWeights[b].mWeight));
|
vertexBones[ bone->mWeights[b].mVertexId ].push_back( BoneWeight( a, bone->mWeights[b].mWeight));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int numFacesHandled = 0;
|
unsigned int numFacesHandled = 0;
|
||||||
|
@ -189,7 +197,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
{
|
{
|
||||||
// skip if the face is already stored in a submesh
|
// skip if the face is already stored in a submesh
|
||||||
if( isFaceHandled[a] )
|
if( isFaceHandled[a] )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const aiFace& face = pMesh->mFaces[a];
|
const aiFace& face = pMesh->mFaces[a];
|
||||||
// check every vertex if its bones would still fit into the current submesh
|
// check every vertex if its bones would still fit into the current submesh
|
||||||
|
@ -201,17 +211,27 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
unsigned int boneIndex = vb[c].first;
|
unsigned int boneIndex = vb[c].first;
|
||||||
// if the bone is already used in this submesh, it's ok
|
// if the bone is already used in this submesh, it's ok
|
||||||
if( isBoneUsed[boneIndex] )
|
if( isBoneUsed[boneIndex] )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// if it's not used, yet, we would need to add it. Store its bone index
|
// if it's not used, yet, we would need to add it. Store its bone index
|
||||||
if( std::find( newBonesAtCurrentFace.begin(), newBonesAtCurrentFace.end(), boneIndex) == newBonesAtCurrentFace.end() )
|
if( std::find( newBonesAtCurrentFace.begin(), newBonesAtCurrentFace.end(), boneIndex) == newBonesAtCurrentFace.end() )
|
||||||
|
{
|
||||||
newBonesAtCurrentFace.push_back( boneIndex);
|
newBonesAtCurrentFace.push_back( boneIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (newBonesAtCurrentFace.size() > mMaxBoneCount)
|
||||||
|
{
|
||||||
|
throw DeadlyImportError("SplitByBoneCountProcess: Single face requires more bones than specified max bone count!");
|
||||||
|
}
|
||||||
// leave out the face if the new bones required for this face don't fit the bone count limit anymore
|
// leave out the face if the new bones required for this face don't fit the bone count limit anymore
|
||||||
if( numBones + newBonesAtCurrentFace.size() > mMaxBoneCount )
|
if( numBones + newBonesAtCurrentFace.size() > mMaxBoneCount )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// mark all new bones as necessary
|
// mark all new bones as necessary
|
||||||
while( !newBonesAtCurrentFace.empty() )
|
while( !newBonesAtCurrentFace.empty() )
|
||||||
|
@ -219,7 +239,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
unsigned int newIndex = newBonesAtCurrentFace.back();
|
unsigned int newIndex = newBonesAtCurrentFace.back();
|
||||||
newBonesAtCurrentFace.pop_back(); // this also avoids the deallocation which comes with a clear()
|
newBonesAtCurrentFace.pop_back(); // this also avoids the deallocation which comes with a clear()
|
||||||
if( isBoneUsed[newIndex] )
|
if( isBoneUsed[newIndex] )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
isBoneUsed[newIndex] = true;
|
isBoneUsed[newIndex] = true;
|
||||||
numBones++;
|
numBones++;
|
||||||
|
@ -237,7 +259,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
// create a new mesh to hold this subset of the source mesh
|
// create a new mesh to hold this subset of the source mesh
|
||||||
aiMesh* newMesh = new aiMesh;
|
aiMesh* newMesh = new aiMesh;
|
||||||
if( pMesh->mName.length > 0 )
|
if( pMesh->mName.length > 0 )
|
||||||
|
{
|
||||||
newMesh->mName.Set( format() << pMesh->mName.data << "_sub" << poNewMeshes.size());
|
newMesh->mName.Set( format() << pMesh->mName.data << "_sub" << poNewMeshes.size());
|
||||||
|
}
|
||||||
newMesh->mMaterialIndex = pMesh->mMaterialIndex;
|
newMesh->mMaterialIndex = pMesh->mMaterialIndex;
|
||||||
newMesh->mPrimitiveTypes = pMesh->mPrimitiveTypes;
|
newMesh->mPrimitiveTypes = pMesh->mPrimitiveTypes;
|
||||||
poNewMeshes.push_back( newMesh);
|
poNewMeshes.push_back( newMesh);
|
||||||
|
@ -247,7 +271,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
newMesh->mNumFaces = static_cast<unsigned int>(subMeshFaces.size());
|
newMesh->mNumFaces = static_cast<unsigned int>(subMeshFaces.size());
|
||||||
newMesh->mVertices = new aiVector3D[newMesh->mNumVertices];
|
newMesh->mVertices = new aiVector3D[newMesh->mNumVertices];
|
||||||
if( pMesh->HasNormals() )
|
if( pMesh->HasNormals() )
|
||||||
|
{
|
||||||
newMesh->mNormals = new aiVector3D[newMesh->mNumVertices];
|
newMesh->mNormals = new aiVector3D[newMesh->mNumVertices];
|
||||||
|
}
|
||||||
if( pMesh->HasTangentsAndBitangents() )
|
if( pMesh->HasTangentsAndBitangents() )
|
||||||
{
|
{
|
||||||
newMesh->mTangents = new aiVector3D[newMesh->mNumVertices];
|
newMesh->mTangents = new aiVector3D[newMesh->mNumVertices];
|
||||||
|
@ -256,13 +282,17 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++a )
|
for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++a )
|
||||||
{
|
{
|
||||||
if( pMesh->HasTextureCoords( a) )
|
if( pMesh->HasTextureCoords( a) )
|
||||||
|
{
|
||||||
newMesh->mTextureCoords[a] = new aiVector3D[newMesh->mNumVertices];
|
newMesh->mTextureCoords[a] = new aiVector3D[newMesh->mNumVertices];
|
||||||
|
}
|
||||||
newMesh->mNumUVComponents[a] = pMesh->mNumUVComponents[a];
|
newMesh->mNumUVComponents[a] = pMesh->mNumUVComponents[a];
|
||||||
}
|
}
|
||||||
for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS; ++a )
|
for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS; ++a )
|
||||||
{
|
{
|
||||||
if( pMesh->HasVertexColors( a) )
|
if( pMesh->HasVertexColors( a) )
|
||||||
|
{
|
||||||
newMesh->mColors[a] = new aiColor4D[newMesh->mNumVertices];
|
newMesh->mColors[a] = new aiColor4D[newMesh->mNumVertices];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// and copy over the data, generating faces with linear indices along the way
|
// and copy over the data, generating faces with linear indices along the way
|
||||||
|
@ -285,7 +315,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
|
|
||||||
newMesh->mVertices[nvi] = pMesh->mVertices[srcIndex];
|
newMesh->mVertices[nvi] = pMesh->mVertices[srcIndex];
|
||||||
if( pMesh->HasNormals() )
|
if( pMesh->HasNormals() )
|
||||||
|
{
|
||||||
newMesh->mNormals[nvi] = pMesh->mNormals[srcIndex];
|
newMesh->mNormals[nvi] = pMesh->mNormals[srcIndex];
|
||||||
|
}
|
||||||
if( pMesh->HasTangentsAndBitangents() )
|
if( pMesh->HasTangentsAndBitangents() )
|
||||||
{
|
{
|
||||||
newMesh->mTangents[nvi] = pMesh->mTangents[srcIndex];
|
newMesh->mTangents[nvi] = pMesh->mTangents[srcIndex];
|
||||||
|
@ -294,12 +326,16 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
for( unsigned int c = 0; c < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++c )
|
for( unsigned int c = 0; c < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++c )
|
||||||
{
|
{
|
||||||
if( pMesh->HasTextureCoords( c) )
|
if( pMesh->HasTextureCoords( c) )
|
||||||
|
{
|
||||||
newMesh->mTextureCoords[c][nvi] = pMesh->mTextureCoords[c][srcIndex];
|
newMesh->mTextureCoords[c][nvi] = pMesh->mTextureCoords[c][srcIndex];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for( unsigned int c = 0; c < AI_MAX_NUMBER_OF_COLOR_SETS; ++c )
|
for( unsigned int c = 0; c < AI_MAX_NUMBER_OF_COLOR_SETS; ++c )
|
||||||
{
|
{
|
||||||
if( pMesh->HasVertexColors( c) )
|
if( pMesh->HasVertexColors( c) )
|
||||||
|
{
|
||||||
newMesh->mColors[c][nvi] = pMesh->mColors[c][srcIndex];
|
newMesh->mColors[c][nvi] = pMesh->mColors[c][srcIndex];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nvi++;
|
nvi++;
|
||||||
|
@ -316,7 +352,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
for( unsigned int a = 0; a < pMesh->mNumBones; ++a )
|
for( unsigned int a = 0; a < pMesh->mNumBones; ++a )
|
||||||
{
|
{
|
||||||
if( !isBoneUsed[a] )
|
if( !isBoneUsed[a] )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// create the new bone
|
// create the new bone
|
||||||
const aiBone* srcBone = pMesh->mBones[a];
|
const aiBone* srcBone = pMesh->mBones[a];
|
||||||
|
@ -340,7 +378,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
{
|
{
|
||||||
unsigned int newBoneIndex = mappedBoneIndex[ bonesOnThisVertex[b].first ];
|
unsigned int newBoneIndex = mappedBoneIndex[ bonesOnThisVertex[b].first ];
|
||||||
if( newBoneIndex != std::numeric_limits<unsigned int>::max() )
|
if( newBoneIndex != std::numeric_limits<unsigned int>::max() )
|
||||||
|
{
|
||||||
newMesh->mBones[newBoneIndex]->mNumWeights++;
|
newMesh->mBones[newBoneIndex]->mNumWeights++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
10
thirdparty/assimp/code/Common/Version.cpp
vendored
10
thirdparty/assimp/code/Common/Version.cpp
vendored
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -55,7 +55,7 @@ static const char* LEGAL_INFORMATION =
|
||||||
"Open Asset Import Library (Assimp).\n"
|
"Open Asset Import Library (Assimp).\n"
|
||||||
"A free C/C++ library to import various 3D file formats into applications\n\n"
|
"A free C/C++ library to import various 3D file formats into applications\n\n"
|
||||||
|
|
||||||
"(c) 2006-2019, assimp team\n"
|
"(c) 2006-2020, assimp team\n"
|
||||||
"License under the terms and conditions of the 3-clause BSD license\n"
|
"License under the terms and conditions of the 3-clause BSD license\n"
|
||||||
"http://assimp.org\n"
|
"http://assimp.org\n"
|
||||||
;
|
;
|
||||||
|
@ -66,6 +66,12 @@ ASSIMP_API const char* aiGetLegalString () {
|
||||||
return LEGAL_INFORMATION;
|
return LEGAL_INFORMATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Get Assimp patch version
|
||||||
|
ASSIMP_API unsigned int aiGetVersionPatch() {
|
||||||
|
return VER_PATCH;
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get Assimp minor version
|
// Get Assimp minor version
|
||||||
ASSIMP_API unsigned int aiGetVersionMinor () {
|
ASSIMP_API unsigned int aiGetVersionMinor () {
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ VertexTriangleAdjacency::VertexTriangleAdjacency(aiFace *pcFaces,
|
||||||
{
|
{
|
||||||
// compute the number of referenced vertices if it wasn't specified by the caller
|
// compute the number of referenced vertices if it wasn't specified by the caller
|
||||||
const aiFace* const pcFaceEnd = pcFaces + iNumFaces;
|
const aiFace* const pcFaceEnd = pcFaces + iNumFaces;
|
||||||
if (!iNumVertices) {
|
if (0 == iNumVertices) {
|
||||||
for (aiFace* pcFace = pcFaces; pcFace != pcFaceEnd; ++pcFace) {
|
for (aiFace* pcFace = pcFaces; pcFace != pcFaceEnd; ++pcFace) {
|
||||||
ai_assert( nullptr != pcFace );
|
ai_assert( nullptr != pcFace );
|
||||||
ai_assert(3 == pcFace->mNumIndices);
|
ai_assert(3 == pcFace->mNumIndices);
|
||||||
|
@ -68,7 +68,7 @@ VertexTriangleAdjacency::VertexTriangleAdjacency(aiFace *pcFaces,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mNumVertices = iNumVertices;
|
mNumVertices = iNumVertices + 1;
|
||||||
|
|
||||||
unsigned int* pi;
|
unsigned int* pi;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ The ASSBIN file format is composed of chunks to represent the hierarchical aiSce
|
||||||
This makes the format extensible and allows backward-compatibility with future data structure
|
This makes the format extensible and allows backward-compatibility with future data structure
|
||||||
versions. The <tt><root>/code/assbin_chunks.h</tt> header contains some magic constants
|
versions. The <tt><root>/code/assbin_chunks.h</tt> header contains some magic constants
|
||||||
for use by stand-alone ASSBIN loaders. Also, Assimp's own file writer can be found
|
for use by stand-alone ASSBIN loaders. Also, Assimp's own file writer can be found
|
||||||
in <tt><root>/tools/assimp_cmd/WriteDumb.cpp</tt> (yes, the 'b' is no typo ...).
|
in <tt><root>/tools/assimp_cmd/WriteDump.cpp</tt> (yes, the 'b' is no typo ...).
|
||||||
|
|
||||||
@verbatim
|
@verbatim
|
||||||
|
|
||||||
|
|
97
thirdparty/assimp/code/Common/material.cpp
vendored
Normal file
97
thirdparty/assimp/code/Common/material.cpp
vendored
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
with or without modification, are permitted provided that the
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior
|
||||||
|
written permission of the assimp team.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// @file material.cpp
|
||||||
|
/** Implement common material related functions. */
|
||||||
|
|
||||||
|
#include <assimp/ai_assert.h>
|
||||||
|
#include <assimp/material.h>
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------
|
||||||
|
const char* TextureTypeToString(aiTextureType in)
|
||||||
|
{
|
||||||
|
switch (in)
|
||||||
|
{
|
||||||
|
case aiTextureType_NONE:
|
||||||
|
return "n/a";
|
||||||
|
case aiTextureType_DIFFUSE:
|
||||||
|
return "Diffuse";
|
||||||
|
case aiTextureType_SPECULAR:
|
||||||
|
return "Specular";
|
||||||
|
case aiTextureType_AMBIENT:
|
||||||
|
return "Ambient";
|
||||||
|
case aiTextureType_EMISSIVE:
|
||||||
|
return "Emissive";
|
||||||
|
case aiTextureType_OPACITY:
|
||||||
|
return "Opacity";
|
||||||
|
case aiTextureType_NORMALS:
|
||||||
|
return "Normals";
|
||||||
|
case aiTextureType_HEIGHT:
|
||||||
|
return "Height";
|
||||||
|
case aiTextureType_SHININESS:
|
||||||
|
return "Shininess";
|
||||||
|
case aiTextureType_DISPLACEMENT:
|
||||||
|
return "Displacement";
|
||||||
|
case aiTextureType_LIGHTMAP:
|
||||||
|
return "Lightmap";
|
||||||
|
case aiTextureType_REFLECTION:
|
||||||
|
return "Reflection";
|
||||||
|
case aiTextureType_BASE_COLOR:
|
||||||
|
return "BaseColor";
|
||||||
|
case aiTextureType_NORMAL_CAMERA:
|
||||||
|
return "NormalCamera";
|
||||||
|
case aiTextureType_EMISSION_COLOR:
|
||||||
|
return "EmissionColor";
|
||||||
|
case aiTextureType_METALNESS:
|
||||||
|
return "Metalness";
|
||||||
|
case aiTextureType_DIFFUSE_ROUGHNESS:
|
||||||
|
return "DiffuseRoughness";
|
||||||
|
case aiTextureType_AMBIENT_OCCLUSION:
|
||||||
|
return "AmbientOcclusion";
|
||||||
|
case aiTextureType_UNKNOWN:
|
||||||
|
return "Unknown";
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ai_assert(false);
|
||||||
|
return "BUG";
|
||||||
|
}
|
2
thirdparty/assimp/code/Common/scene.cpp
vendored
2
thirdparty/assimp/code/Common/scene.cpp
vendored
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
thirdparty/assimp/code/Common/simd.cpp
vendored
2
thirdparty/assimp/code/Common/simd.cpp
vendored
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
thirdparty/assimp/code/Common/simd.h
vendored
2
thirdparty/assimp/code/Common/simd.h
vendored
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXAnimation.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXAnimation.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
9
thirdparty/assimp/code/FBX/FBXCommon.h
vendored
9
thirdparty/assimp/code/FBX/FBXCommon.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -50,9 +50,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace FBX
|
namespace FBX
|
||||||
{
|
{
|
||||||
const std::string NULL_RECORD = { // 13 null bytes
|
const std::string NULL_RECORD = { // 25 null bytes in 64-bit and 13 null bytes in 32-bit
|
||||||
'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'
|
'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0',
|
||||||
}; // who knows why
|
'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'
|
||||||
|
}; // who knows why, it looks like two integers 32/64 bit (compressed and uncompressed sizes?) + 1 byte (might be compression type?)
|
||||||
const std::string SEPARATOR = {'\x00', '\x01'}; // for use inside strings
|
const std::string SEPARATOR = {'\x00', '\x01'}; // for use inside strings
|
||||||
const std::string MAGIC_NODE_TAG = "_$AssimpFbx$"; // from import
|
const std::string MAGIC_NODE_TAG = "_$AssimpFbx$"; // from import
|
||||||
const int64_t SECOND = 46186158000; // FBX's kTime unit
|
const int64_t SECOND = 46186158000; // FBX's kTime unit
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
37
thirdparty/assimp/code/FBX/FBXConverter.cpp
vendored
37
thirdparty/assimp/code/FBX/FBXConverter.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -60,6 +60,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <assimp/scene.h>
|
#include <assimp/scene.h>
|
||||||
|
|
||||||
#include <assimp/CreateAnimMesh.h>
|
#include <assimp/CreateAnimMesh.h>
|
||||||
|
#include <assimp/commonMetaData.h>
|
||||||
|
#include <assimp/StringUtils.h>
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -1562,7 +1564,7 @@ namespace Assimp {
|
||||||
|
|
||||||
bone_map.clear();
|
bone_map.clear();
|
||||||
}
|
}
|
||||||
catch (std::exception&e) {
|
catch (std::exception&) {
|
||||||
std::for_each(bones.begin(), bones.end(), Util::delete_fun<aiBone>());
|
std::for_each(bones.begin(), bones.end(), Util::delete_fun<aiBone>());
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
@ -1597,12 +1599,11 @@ namespace Assimp {
|
||||||
aiBone *bone = nullptr;
|
aiBone *bone = nullptr;
|
||||||
|
|
||||||
if (bone_map.count(deformer_name)) {
|
if (bone_map.count(deformer_name)) {
|
||||||
std::cout << "retrieved bone from lookup " << bone_name.C_Str() << ". Deformer: " << deformer_name
|
ASSIMP_LOG_DEBUG_F("retrieved bone from lookup ", bone_name.C_Str(), ". Deformer:", deformer_name);
|
||||||
<< std::endl;
|
bone = bone_map[deformer_name];
|
||||||
bone = bone_map[deformer_name];
|
} else {
|
||||||
} else {
|
ASSIMP_LOG_DEBUG_F("created new bone ", bone_name.C_Str(), ". Deformer: ", deformer_name);
|
||||||
std::cout << "created new bone " << bone_name.C_Str() << ". Deformer: " << deformer_name << std::endl;
|
bone = new aiBone();
|
||||||
bone = new aiBone();
|
|
||||||
bone->mName = bone_name;
|
bone->mName = bone_name;
|
||||||
|
|
||||||
// store local transform link for post processing
|
// store local transform link for post processing
|
||||||
|
@ -1648,7 +1649,7 @@ namespace Assimp {
|
||||||
bone_map.insert(std::pair<const std::string, aiBone *>(deformer_name, bone));
|
bone_map.insert(std::pair<const std::string, aiBone *>(deformer_name, bone));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "bone research: Indicies size: " << out_indices.size() << std::endl;
|
ASSIMP_LOG_DEBUG_F("bone research: Indicies size: ", out_indices.size());
|
||||||
|
|
||||||
// lookup must be populated in case something goes wrong
|
// lookup must be populated in case something goes wrong
|
||||||
// this also allocates bones to mesh instance outside
|
// this also allocates bones to mesh instance outside
|
||||||
|
@ -2087,7 +2088,14 @@ namespace Assimp {
|
||||||
TrySetTextureProperties(out_mat, textures, "Maya|TEX_emissive_map|file", aiTextureType_EMISSION_COLOR, mesh);
|
TrySetTextureProperties(out_mat, textures, "Maya|TEX_emissive_map|file", aiTextureType_EMISSION_COLOR, mesh);
|
||||||
TrySetTextureProperties(out_mat, textures, "Maya|TEX_metallic_map|file", aiTextureType_METALNESS, mesh);
|
TrySetTextureProperties(out_mat, textures, "Maya|TEX_metallic_map|file", aiTextureType_METALNESS, mesh);
|
||||||
TrySetTextureProperties(out_mat, textures, "Maya|TEX_roughness_map|file", aiTextureType_DIFFUSE_ROUGHNESS, mesh);
|
TrySetTextureProperties(out_mat, textures, "Maya|TEX_roughness_map|file", aiTextureType_DIFFUSE_ROUGHNESS, mesh);
|
||||||
TrySetTextureProperties(out_mat, textures, "Maya|TEX_ao_map|file", aiTextureType_AMBIENT_OCCLUSION, mesh);
|
TrySetTextureProperties(out_mat, textures, "Maya|TEX_ao_map|file", aiTextureType_AMBIENT_OCCLUSION, mesh);
|
||||||
|
|
||||||
|
// 3DSMax PBR
|
||||||
|
TrySetTextureProperties(out_mat, textures, "3dsMax|Parameters|base_color_map", aiTextureType_BASE_COLOR, mesh);
|
||||||
|
TrySetTextureProperties(out_mat, textures, "3dsMax|Parameters|bump_map", aiTextureType_NORMAL_CAMERA, mesh);
|
||||||
|
TrySetTextureProperties(out_mat, textures, "3dsMax|Parameters|emission_map", aiTextureType_EMISSION_COLOR, mesh);
|
||||||
|
TrySetTextureProperties(out_mat, textures, "3dsMax|Parameters|metalness_map", aiTextureType_METALNESS, mesh);
|
||||||
|
TrySetTextureProperties(out_mat, textures, "3dsMax|Parameters|roughness_map", aiTextureType_DIFFUSE_ROUGHNESS, mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FBXConverter::SetTextureProperties(aiMaterial* out_mat, const LayeredTextureMap& layeredTextures, const MeshGeometry* const mesh)
|
void FBXConverter::SetTextureProperties(aiMaterial* out_mat, const LayeredTextureMap& layeredTextures, const MeshGeometry* const mesh)
|
||||||
|
@ -3604,7 +3612,9 @@ void FBXConverter::SetShadingPropertiesRaw(aiMaterial* out_mat, const PropertyTa
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
out->mMetaData = aiMetadata::Alloc(15);
|
const bool hasGenerator = !doc.Creator().empty();
|
||||||
|
|
||||||
|
out->mMetaData = aiMetadata::Alloc(16 + (hasGenerator ? 1 : 0));
|
||||||
out->mMetaData->Set(0, "UpAxis", doc.GlobalSettings().UpAxis());
|
out->mMetaData->Set(0, "UpAxis", doc.GlobalSettings().UpAxis());
|
||||||
out->mMetaData->Set(1, "UpAxisSign", doc.GlobalSettings().UpAxisSign());
|
out->mMetaData->Set(1, "UpAxisSign", doc.GlobalSettings().UpAxisSign());
|
||||||
out->mMetaData->Set(2, "FrontAxis", doc.GlobalSettings().FrontAxis());
|
out->mMetaData->Set(2, "FrontAxis", doc.GlobalSettings().FrontAxis());
|
||||||
|
@ -3620,6 +3630,11 @@ void FBXConverter::SetShadingPropertiesRaw(aiMaterial* out_mat, const PropertyTa
|
||||||
out->mMetaData->Set(12, "TimeSpanStart", doc.GlobalSettings().TimeSpanStart());
|
out->mMetaData->Set(12, "TimeSpanStart", doc.GlobalSettings().TimeSpanStart());
|
||||||
out->mMetaData->Set(13, "TimeSpanStop", doc.GlobalSettings().TimeSpanStop());
|
out->mMetaData->Set(13, "TimeSpanStop", doc.GlobalSettings().TimeSpanStop());
|
||||||
out->mMetaData->Set(14, "CustomFrameRate", doc.GlobalSettings().CustomFrameRate());
|
out->mMetaData->Set(14, "CustomFrameRate", doc.GlobalSettings().CustomFrameRate());
|
||||||
|
out->mMetaData->Set(15, AI_METADATA_SOURCE_FORMAT_VERSION, aiString(to_string(doc.FBXVersion())));
|
||||||
|
if (hasGenerator)
|
||||||
|
{
|
||||||
|
out->mMetaData->Set(16, AI_METADATA_SOURCE_GENERATOR, aiString(doc.Creator()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FBXConverter::TransferDataToScene()
|
void FBXConverter::TransferDataToScene()
|
||||||
|
|
4
thirdparty/assimp/code/FBX/FBXConverter.h
vendored
4
thirdparty/assimp/code/FBX/FBXConverter.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -421,6 +421,8 @@ private:
|
||||||
double& minTime,
|
double& minTime,
|
||||||
Model::RotOrder order);
|
Model::RotOrder order);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Copy global geometric data and some information about the source asset into scene metadata.
|
||||||
void ConvertGlobalSettings();
|
void ConvertGlobalSettings();
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXDeformer.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXDeformer.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXDocument.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXDocument.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXDocument.h
vendored
2
thirdparty/assimp/code/FBX/FBXDocument.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXDocumentUtil.h
vendored
2
thirdparty/assimp/code/FBX/FBXDocumentUtil.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
|
16
thirdparty/assimp/code/FBX/FBXExportNode.cpp
vendored
16
thirdparty/assimp/code/FBX/FBXExportNode.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -325,9 +325,9 @@ void FBX::Node::BeginBinary(Assimp::StreamWriterLE &s)
|
||||||
this->start_pos = s.Tell();
|
this->start_pos = s.Tell();
|
||||||
|
|
||||||
// placeholders for end pos and property section info
|
// placeholders for end pos and property section info
|
||||||
s.PutU4(0); // end pos
|
s.PutU8(0); // end pos
|
||||||
s.PutU4(0); // number of properties
|
s.PutU8(0); // number of properties
|
||||||
s.PutU4(0); // total property section length
|
s.PutU8(0); // total property section length
|
||||||
|
|
||||||
// node name
|
// node name
|
||||||
s.PutU1(uint8_t(name.size())); // length of node name
|
s.PutU1(uint8_t(name.size())); // length of node name
|
||||||
|
@ -352,9 +352,9 @@ void FBX::Node::EndPropertiesBinary(
|
||||||
size_t pos = s.Tell();
|
size_t pos = s.Tell();
|
||||||
ai_assert(pos > property_start);
|
ai_assert(pos > property_start);
|
||||||
size_t property_section_size = pos - property_start;
|
size_t property_section_size = pos - property_start;
|
||||||
s.Seek(start_pos + 4);
|
s.Seek(start_pos + 8); // 8 bytes of uint64_t of end_pos
|
||||||
s.PutU4(uint32_t(num_properties));
|
s.PutU8(num_properties);
|
||||||
s.PutU4(uint32_t(property_section_size));
|
s.PutU8(property_section_size);
|
||||||
s.Seek(pos);
|
s.Seek(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,7 +375,7 @@ void FBX::Node::EndBinary(
|
||||||
// now go back and write initial pos
|
// now go back and write initial pos
|
||||||
this->end_pos = s.Tell();
|
this->end_pos = s.Tell();
|
||||||
s.Seek(start_pos);
|
s.Seek(start_pos);
|
||||||
s.PutU4(uint32_t(end_pos));
|
s.PutU8(end_pos);
|
||||||
s.Seek(end_pos);
|
s.Seek(end_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXExportNode.h
vendored
2
thirdparty/assimp/code/FBX/FBXExportNode.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
11
thirdparty/assimp/code/FBX/FBXExporter.cpp
vendored
11
thirdparty/assimp/code/FBX/FBXExporter.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -81,8 +81,8 @@ using namespace Assimp::FBX;
|
||||||
// some constants that we'll use for writing metadata
|
// some constants that we'll use for writing metadata
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace FBX {
|
namespace FBX {
|
||||||
const std::string EXPORT_VERSION_STR = "7.4.0";
|
const std::string EXPORT_VERSION_STR = "7.5.0";
|
||||||
const uint32_t EXPORT_VERSION_INT = 7400; // 7.4 == 2014/2015
|
const uint32_t EXPORT_VERSION_INT = 7500; // 7.5 == 2016+
|
||||||
// FBX files have some hashed values that depend on the creation time field,
|
// FBX files have some hashed values that depend on the creation time field,
|
||||||
// but for now we don't actually know how to generate these.
|
// but for now we don't actually know how to generate these.
|
||||||
// what we can do is set them to a known-working version.
|
// what we can do is set them to a known-working version.
|
||||||
|
@ -1860,6 +1860,7 @@ void FBXExporter::WriteObjects ()
|
||||||
sdnode.AddChild("Version", int32_t(100));
|
sdnode.AddChild("Version", int32_t(100));
|
||||||
sdnode.AddChild("UserData", "", "");
|
sdnode.AddChild("UserData", "", "");
|
||||||
|
|
||||||
|
std::set<int32_t> setWeightedVertex;
|
||||||
// add indices and weights, if any
|
// add indices and weights, if any
|
||||||
if (b) {
|
if (b) {
|
||||||
std::vector<int32_t> subdef_indices;
|
std::vector<int32_t> subdef_indices;
|
||||||
|
@ -1867,7 +1868,8 @@ void FBXExporter::WriteObjects ()
|
||||||
int32_t last_index = -1;
|
int32_t last_index = -1;
|
||||||
for (size_t wi = 0; wi < b->mNumWeights; ++wi) {
|
for (size_t wi = 0; wi < b->mNumWeights; ++wi) {
|
||||||
int32_t vi = vertex_indices[b->mWeights[wi].mVertexId];
|
int32_t vi = vertex_indices[b->mWeights[wi].mVertexId];
|
||||||
if (vi == last_index) {
|
bool bIsWeightedAlready = (setWeightedVertex.find(vi) != setWeightedVertex.end());
|
||||||
|
if (vi == last_index || bIsWeightedAlready) {
|
||||||
// only for vertices we exported to fbx
|
// only for vertices we exported to fbx
|
||||||
// TODO, FIXME: this assumes identically-located vertices
|
// TODO, FIXME: this assumes identically-located vertices
|
||||||
// will always deform in the same way.
|
// will always deform in the same way.
|
||||||
|
@ -1877,6 +1879,7 @@ void FBXExporter::WriteObjects ()
|
||||||
// identical vertex.
|
// identical vertex.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
setWeightedVertex.insert(vi);
|
||||||
subdef_indices.push_back(vi);
|
subdef_indices.push_back(vi);
|
||||||
subdef_weights.push_back(b->mWeights[wi].mWeight);
|
subdef_weights.push_back(b->mWeights[wi].mWeight);
|
||||||
last_index = vi;
|
last_index = vi;
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXExporter.h
vendored
2
thirdparty/assimp/code/FBX/FBXExporter.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXImporter.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXImporter.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXImporter.h
vendored
2
thirdparty/assimp/code/FBX/FBXImporter.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXMaterial.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXMaterial.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
33
thirdparty/assimp/code/FBX/FBXMeshGeometry.cpp
vendored
33
thirdparty/assimp/code/FBX/FBXMeshGeometry.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -446,14 +446,19 @@ void ResolveVertexDataArray(std::vector<T>& data_out, const Scope& source,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::vector<T> tempData;
|
std::vector<T> tempData;
|
||||||
ParseVectorDataArray(tempData, GetRequiredElement(source, dataElementName));
|
ParseVectorDataArray(tempData, GetRequiredElement(source, dataElementName));
|
||||||
|
|
||||||
|
if (tempData.size() != mapping_offsets.size()) {
|
||||||
|
FBXImporter::LogError(Formatter::format("length of input data unexpected for ByVertice mapping: ")
|
||||||
|
<< tempData.size() << ", expected " << mapping_offsets.size());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
data_out.resize(vertex_count);
|
data_out.resize(vertex_count);
|
||||||
for (size_t i = 0, e = tempData.size(); i < e; ++i) {
|
for (size_t i = 0, e = tempData.size(); i < e; ++i) {
|
||||||
|
|
||||||
const unsigned int istart = mapping_offsets[i], iend = istart + mapping_counts[i];
|
const unsigned int istart = mapping_offsets[i], iend = istart + mapping_counts[i];
|
||||||
for (unsigned int j = istart; j < iend; ++j) {
|
for (unsigned int j = istart; j < iend; ++j) {
|
||||||
data_out[mappings[j]] = tempData[i];
|
data_out[mappings[j]] = tempData[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -461,10 +466,17 @@ void ResolveVertexDataArray(std::vector<T>& data_out, const Scope& source,
|
||||||
std::vector<T> tempData;
|
std::vector<T> tempData;
|
||||||
ParseVectorDataArray(tempData, GetRequiredElement(source, dataElementName));
|
ParseVectorDataArray(tempData, GetRequiredElement(source, dataElementName));
|
||||||
|
|
||||||
data_out.resize(vertex_count);
|
|
||||||
|
|
||||||
std::vector<int> uvIndices;
|
std::vector<int> uvIndices;
|
||||||
ParseVectorDataArray(uvIndices,GetRequiredElement(source,indexDataElementName));
|
ParseVectorDataArray(uvIndices,GetRequiredElement(source,indexDataElementName));
|
||||||
|
|
||||||
|
if (uvIndices.size() != vertex_count) {
|
||||||
|
FBXImporter::LogError(Formatter::format("length of input data unexpected for ByVertice mapping: ")
|
||||||
|
<< uvIndices.size() << ", expected " << vertex_count);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data_out.resize(vertex_count);
|
||||||
|
|
||||||
for (size_t i = 0, e = uvIndices.size(); i < e; ++i) {
|
for (size_t i = 0, e = uvIndices.size(); i < e; ++i) {
|
||||||
|
|
||||||
const unsigned int istart = mapping_offsets[i], iend = istart + mapping_counts[i];
|
const unsigned int istart = mapping_offsets[i], iend = istart + mapping_counts[i];
|
||||||
|
@ -493,16 +505,17 @@ void ResolveVertexDataArray(std::vector<T>& data_out, const Scope& source,
|
||||||
std::vector<T> tempData;
|
std::vector<T> tempData;
|
||||||
ParseVectorDataArray(tempData, GetRequiredElement(source, dataElementName));
|
ParseVectorDataArray(tempData, GetRequiredElement(source, dataElementName));
|
||||||
|
|
||||||
data_out.resize(vertex_count);
|
|
||||||
|
|
||||||
std::vector<int> uvIndices;
|
std::vector<int> uvIndices;
|
||||||
ParseVectorDataArray(uvIndices,GetRequiredElement(source,indexDataElementName));
|
ParseVectorDataArray(uvIndices,GetRequiredElement(source,indexDataElementName));
|
||||||
|
|
||||||
if (uvIndices.size() != vertex_count) {
|
if (uvIndices.size() != vertex_count) {
|
||||||
FBXImporter::LogError("length of input data unexpected for ByPolygonVertex mapping");
|
FBXImporter::LogError(Formatter::format("length of input data unexpected for ByPolygonVertex mapping: ")
|
||||||
|
<< uvIndices.size() << ", expected " << vertex_count);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data_out.resize(vertex_count);
|
||||||
|
|
||||||
const T empty;
|
const T empty;
|
||||||
unsigned int next = 0;
|
unsigned int next = 0;
|
||||||
for(int i : uvIndices) {
|
for(int i : uvIndices) {
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXMeshGeometry.h
vendored
2
thirdparty/assimp/code/FBX/FBXMeshGeometry.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXModel.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXModel.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
10
thirdparty/assimp/code/FBX/FBXParser.cpp
vendored
10
thirdparty/assimp/code/FBX/FBXParser.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -367,9 +367,13 @@ float ParseTokenAsFloat(const Token& t, const char*& err_out)
|
||||||
// first - next in the fbx token stream comes ',',
|
// first - next in the fbx token stream comes ',',
|
||||||
// which fast_atof could interpret as decimal point.
|
// which fast_atof could interpret as decimal point.
|
||||||
#define MAX_FLOAT_LENGTH 31
|
#define MAX_FLOAT_LENGTH 31
|
||||||
char temp[MAX_FLOAT_LENGTH + 1];
|
|
||||||
const size_t length = static_cast<size_t>(t.end()-t.begin());
|
const size_t length = static_cast<size_t>(t.end()-t.begin());
|
||||||
std::copy(t.begin(),t.end(),temp);
|
if (length > MAX_FLOAT_LENGTH) {
|
||||||
|
return 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
char temp[MAX_FLOAT_LENGTH + 1];
|
||||||
|
std::copy(t.begin(), t.end(), temp);
|
||||||
temp[std::min(static_cast<size_t>(MAX_FLOAT_LENGTH),length)] = '\0';
|
temp[std::min(static_cast<size_t>(MAX_FLOAT_LENGTH),length)] = '\0';
|
||||||
|
|
||||||
return fast_atof(temp);
|
return fast_atof(temp);
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXParser.h
vendored
2
thirdparty/assimp/code/FBX/FBXParser.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXProperties.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXProperties.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXProperties.h
vendored
2
thirdparty/assimp/code/FBX/FBXProperties.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXTokenizer.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXTokenizer.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXTokenizer.h
vendored
2
thirdparty/assimp/code/FBX/FBXTokenizer.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXUtil.cpp
vendored
2
thirdparty/assimp/code/FBX/FBXUtil.cpp
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
2
thirdparty/assimp/code/FBX/FBXUtil.h
vendored
2
thirdparty/assimp/code/FBX/FBXUtil.h
vendored
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -273,14 +273,14 @@ aiReturn aiGetMaterialColor(const aiMaterial* pMat,
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get a aiUVTransform (4 floats) from the material
|
// Get a aiUVTransform (5 floats) from the material
|
||||||
aiReturn aiGetMaterialUVTransform(const aiMaterial* pMat,
|
aiReturn aiGetMaterialUVTransform(const aiMaterial* pMat,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index,
|
unsigned int index,
|
||||||
aiUVTransform* pOut)
|
aiUVTransform* pOut)
|
||||||
{
|
{
|
||||||
unsigned int iMax = 4;
|
unsigned int iMax = 5;
|
||||||
return aiGetMaterialFloatArray(pMat,pKey,type,index,(ai_real*)pOut,&iMax);
|
return aiGetMaterialFloatArray(pMat,pKey,type,index,(ai_real*)pOut,&iMax);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,12 +471,12 @@ aiReturn aiMaterial::AddBinaryProperty (const void* pInput,
|
||||||
aiPropertyTypeInfo pType
|
aiPropertyTypeInfo pType
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ai_assert( pInput != NULL );
|
ai_assert( pInput != nullptr );
|
||||||
ai_assert( pKey != NULL );
|
ai_assert(pKey != nullptr );
|
||||||
ai_assert( 0 != pSizeInBytes );
|
ai_assert( 0 != pSizeInBytes );
|
||||||
|
|
||||||
if ( 0 == pSizeInBytes ) {
|
if ( 0 == pSizeInBytes ) {
|
||||||
|
return AI_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// first search the list whether there is already an entry with this key
|
// first search the list whether there is already an entry with this key
|
||||||
|
@ -504,7 +504,7 @@ aiReturn aiMaterial::AddBinaryProperty (const void* pInput,
|
||||||
pcNew->mData = new char[pSizeInBytes];
|
pcNew->mData = new char[pSizeInBytes];
|
||||||
memcpy (pcNew->mData,pInput,pSizeInBytes);
|
memcpy (pcNew->mData,pInput,pSizeInBytes);
|
||||||
|
|
||||||
pcNew->mKey.length = ::strlen(pKey);
|
pcNew->mKey.length = (ai_uint32)::strlen(pKey);
|
||||||
ai_assert ( MAXLEN > pcNew->mKey.length);
|
ai_assert ( MAXLEN > pcNew->mKey.length);
|
||||||
strcpy( pcNew->mKey.data, pKey );
|
strcpy( pcNew->mKey.data, pKey );
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -36,7 +35,6 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
#include "ArmaturePopulate.h"
|
#include "ArmaturePopulate.h"
|
||||||
|
@ -50,219 +48,215 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
|
|
||||||
/// The default class constructor.
|
/// The default class constructor.
|
||||||
ArmaturePopulate::ArmaturePopulate() : BaseProcess()
|
ArmaturePopulate::ArmaturePopulate() :
|
||||||
{}
|
BaseProcess() {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
/// The class destructor.
|
/// The class destructor.
|
||||||
ArmaturePopulate::~ArmaturePopulate()
|
ArmaturePopulate::~ArmaturePopulate() {
|
||||||
{}
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
bool ArmaturePopulate::IsActive(unsigned int pFlags) const {
|
bool ArmaturePopulate::IsActive(unsigned int pFlags) const {
|
||||||
return (pFlags & aiProcess_PopulateArmatureData) != 0;
|
return (pFlags & aiProcess_PopulateArmatureData) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArmaturePopulate::SetupProperties(const Importer *pImp) {
|
void ArmaturePopulate::SetupProperties(const Importer *pImp) {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArmaturePopulate::Execute(aiScene *out) {
|
void ArmaturePopulate::Execute(aiScene *out) {
|
||||||
|
|
||||||
// Now convert all bone positions to the correct mOffsetMatrix
|
// Now convert all bone positions to the correct mOffsetMatrix
|
||||||
std::vector<aiBone *> bones;
|
std::vector<aiBone *> bones;
|
||||||
std::vector<aiNode *> nodes;
|
std::vector<aiNode *> nodes;
|
||||||
std::map<aiBone *, aiNode *> bone_stack;
|
std::map<aiBone *, aiNode *> bone_stack;
|
||||||
BuildBoneList(out->mRootNode, out->mRootNode, out, bones);
|
BuildBoneList(out->mRootNode, out->mRootNode, out, bones);
|
||||||
BuildNodeList(out->mRootNode, nodes);
|
BuildNodeList(out->mRootNode, nodes);
|
||||||
|
|
||||||
BuildBoneStack(out->mRootNode, out->mRootNode, out, bones, bone_stack, nodes);
|
BuildBoneStack(out->mRootNode, out->mRootNode, out, bones, bone_stack, nodes);
|
||||||
|
|
||||||
ASSIMP_LOG_DEBUG_F("Bone stack size: ", bone_stack.size());
|
ASSIMP_LOG_DEBUG_F("Bone stack size: ", bone_stack.size());
|
||||||
|
|
||||||
for (std::pair<aiBone *, aiNode *> kvp : bone_stack) {
|
for (std::pair<aiBone *, aiNode *> kvp : bone_stack) {
|
||||||
aiBone *bone = kvp.first;
|
aiBone *bone = kvp.first;
|
||||||
aiNode *bone_node = kvp.second;
|
aiNode *bone_node = kvp.second;
|
||||||
ASSIMP_LOG_DEBUG_F("active node lookup: ", bone->mName.C_Str());
|
ASSIMP_LOG_DEBUG_F("active node lookup: ", bone->mName.C_Str());
|
||||||
// lcl transform grab - done in generate_nodes :)
|
// lcl transform grab - done in generate_nodes :)
|
||||||
|
|
||||||
// bone->mOffsetMatrix = bone_node->mTransformation;
|
// bone->mOffsetMatrix = bone_node->mTransformation;
|
||||||
aiNode *armature = GetArmatureRoot(bone_node, bones);
|
aiNode *armature = GetArmatureRoot(bone_node, bones);
|
||||||
|
|
||||||
ai_assert(armature);
|
ai_assert(armature);
|
||||||
|
|
||||||
// set up bone armature id
|
// set up bone armature id
|
||||||
bone->mArmature = armature;
|
bone->mArmature = armature;
|
||||||
|
|
||||||
// set this bone node to be referenced properly
|
// set this bone node to be referenced properly
|
||||||
ai_assert(bone_node);
|
ai_assert(bone_node);
|
||||||
bone->mNode = bone_node;
|
bone->mNode = bone_node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Reprocess all nodes to calculate bone transforms properly based on the REAL
|
// Reprocess all nodes to calculate bone transforms properly based on the REAL
|
||||||
* mOffsetMatrix not the local. */
|
// mOffsetMatrix not the local.
|
||||||
/* Before this would use mesh transforms which is wrong for bone transforms */
|
// Before this would use mesh transforms which is wrong for bone transforms
|
||||||
/* Before this would work for simple character skeletons but not complex meshes
|
// Before this would work for simple character skeletons but not complex meshes
|
||||||
* with multiple origins */
|
// with multiple origins
|
||||||
/* Source: sketch fab log cutter fbx */
|
// Source: sketch fab log cutter fbx
|
||||||
void ArmaturePopulate::BuildBoneList(aiNode *current_node,
|
void ArmaturePopulate::BuildBoneList(aiNode *current_node,
|
||||||
const aiNode *root_node,
|
const aiNode *root_node,
|
||||||
const aiScene *scene,
|
const aiScene *scene,
|
||||||
std::vector<aiBone *> &bones) {
|
std::vector<aiBone *> &bones) {
|
||||||
ai_assert(scene);
|
ai_assert(scene);
|
||||||
for (unsigned int nodeId = 0; nodeId < current_node->mNumChildren; ++nodeId) {
|
for (unsigned int nodeId = 0; nodeId < current_node->mNumChildren; ++nodeId) {
|
||||||
aiNode *child = current_node->mChildren[nodeId];
|
aiNode *child = current_node->mChildren[nodeId];
|
||||||
ai_assert(child);
|
ai_assert(child);
|
||||||
|
|
||||||
// check for bones
|
// check for bones
|
||||||
for (unsigned int meshId = 0; meshId < child->mNumMeshes; ++meshId) {
|
for (unsigned int meshId = 0; meshId < child->mNumMeshes; ++meshId) {
|
||||||
ai_assert(child->mMeshes);
|
ai_assert(child->mMeshes);
|
||||||
unsigned int mesh_index = child->mMeshes[meshId];
|
unsigned int mesh_index = child->mMeshes[meshId];
|
||||||
aiMesh *mesh = scene->mMeshes[mesh_index];
|
aiMesh *mesh = scene->mMeshes[mesh_index];
|
||||||
ai_assert(mesh);
|
ai_assert(mesh);
|
||||||
|
|
||||||
for (unsigned int boneId = 0; boneId < mesh->mNumBones; ++boneId) {
|
for (unsigned int boneId = 0; boneId < mesh->mNumBones; ++boneId) {
|
||||||
aiBone *bone = mesh->mBones[boneId];
|
aiBone *bone = mesh->mBones[boneId];
|
||||||
ai_assert(bone);
|
ai_assert(bone);
|
||||||
|
|
||||||
// duplicate meshes exist with the same bones sometimes :)
|
// duplicate mehes exist with the same bones sometimes :)
|
||||||
// so this must be detected
|
// so this must be detected
|
||||||
if (std::find(bones.begin(), bones.end(), bone) == bones.end()) {
|
if (std::find(bones.begin(), bones.end(), bone) == bones.end()) {
|
||||||
// add the element once
|
// add the element once
|
||||||
bones.push_back(bone);
|
bones.push_back(bone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// find mesh and get bones
|
||||||
|
// then do recursive lookup for bones in root node hierarchy
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// find mesh and get bones
|
BuildBoneList(child, root_node, scene, bones);
|
||||||
// then do recursive lookup for bones in root node hierarchy
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildBoneList(child, root_node, scene, bones);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prepare flat node list which can be used for non recursive lookups later */
|
// Prepare flat node list which can be used for non recursive lookups later
|
||||||
void ArmaturePopulate::BuildNodeList(const aiNode *current_node,
|
void ArmaturePopulate::BuildNodeList(const aiNode *current_node,
|
||||||
std::vector<aiNode *> &nodes) {
|
std::vector<aiNode *> &nodes) {
|
||||||
ai_assert(current_node);
|
ai_assert(current_node);
|
||||||
|
|
||||||
for (unsigned int nodeId = 0; nodeId < current_node->mNumChildren; ++nodeId) {
|
for (unsigned int nodeId = 0; nodeId < current_node->mNumChildren; ++nodeId) {
|
||||||
aiNode *child = current_node->mChildren[nodeId];
|
aiNode *child = current_node->mChildren[nodeId];
|
||||||
ai_assert(child);
|
ai_assert(child);
|
||||||
|
|
||||||
nodes.push_back(child);
|
if (child->mNumMeshes == 0) {
|
||||||
|
nodes.push_back(child);
|
||||||
|
}
|
||||||
|
|
||||||
BuildNodeList(child, nodes);
|
BuildNodeList(child, nodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A bone stack allows us to have multiple armatures, with the same bone names
|
// A bone stack allows us to have multiple armatures, with the same bone names
|
||||||
* A bone stack allows us also to retrieve bones true transform even with
|
// A bone stack allows us also to retrieve bones true transform even with
|
||||||
* duplicate names :)
|
// duplicate names :)
|
||||||
*/
|
|
||||||
void ArmaturePopulate::BuildBoneStack(aiNode *current_node,
|
void ArmaturePopulate::BuildBoneStack(aiNode *current_node,
|
||||||
const aiNode *root_node,
|
const aiNode *root_node,
|
||||||
const aiScene *scene,
|
const aiScene *scene,
|
||||||
const std::vector<aiBone *> &bones,
|
const std::vector<aiBone *> &bones,
|
||||||
std::map<aiBone *, aiNode *> &bone_stack,
|
std::map<aiBone *, aiNode *> &bone_stack,
|
||||||
std::vector<aiNode *> &node_stack) {
|
std::vector<aiNode *> &node_stack) {
|
||||||
ai_assert(scene);
|
ai_assert(scene);
|
||||||
ai_assert(root_node);
|
ai_assert(root_node);
|
||||||
ai_assert(!node_stack.empty());
|
ai_assert(!node_stack.empty());
|
||||||
|
|
||||||
for (aiBone *bone : bones) {
|
for (aiBone *bone : bones) {
|
||||||
ai_assert(bone);
|
ai_assert(bone);
|
||||||
aiNode *node = GetNodeFromStack(bone->mName, node_stack);
|
aiNode *node = GetNodeFromStack(bone->mName, node_stack);
|
||||||
if (node == nullptr) {
|
if (node == nullptr) {
|
||||||
node_stack.clear();
|
node_stack.clear();
|
||||||
BuildNodeList(root_node, node_stack);
|
BuildNodeList(root_node, node_stack);
|
||||||
ASSIMP_LOG_DEBUG_F("Resetting bone stack: nullptr element ", bone->mName.C_Str());
|
ASSIMP_LOG_DEBUG_F("Resetting bone stack: nullptr element ", bone->mName.C_Str());
|
||||||
|
|
||||||
node = GetNodeFromStack(bone->mName, node_stack);
|
node = GetNodeFromStack(bone->mName, node_stack);
|
||||||
|
|
||||||
if (!node) {
|
if (!node) {
|
||||||
ASSIMP_LOG_ERROR("serious import issue node for bone was not detected");
|
ASSIMP_LOG_ERROR("serious import issue node for bone was not detected");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSIMP_LOG_DEBUG_F("Successfully added bone[", bone->mName.C_Str(), "] to stack and bone node is: ", node->mName.C_Str());
|
||||||
|
|
||||||
|
bone_stack.insert(std::pair<aiBone *, aiNode *>(bone, node));
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSIMP_LOG_DEBUG_F("Successfully added bone[", bone->mName.C_Str(), "] to stack and bone node is: ", node->mName.C_Str());
|
|
||||||
|
|
||||||
bone_stack.insert(std::pair<aiBone *, aiNode *>(bone, node));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the armature root node
|
||||||
/* Returns the armature root node */
|
// This is required to be detected for a bone initially, it will recurse up
|
||||||
/* This is required to be detected for a bone initially, it will recurse up
|
// until it cannot find another bone and return the node No known failure
|
||||||
* until it cannot find another bone and return the node No known failure
|
// points. (yet)
|
||||||
* points. (yet)
|
|
||||||
*/
|
|
||||||
aiNode *ArmaturePopulate::GetArmatureRoot(aiNode *bone_node,
|
aiNode *ArmaturePopulate::GetArmatureRoot(aiNode *bone_node,
|
||||||
std::vector<aiBone *> &bone_list) {
|
std::vector<aiBone *> &bone_list) {
|
||||||
while (bone_node) {
|
while (bone_node) {
|
||||||
if (!IsBoneNode(bone_node->mName, bone_list)) {
|
if (!IsBoneNode(bone_node->mName, bone_list)) {
|
||||||
ASSIMP_LOG_DEBUG_F("GetArmatureRoot() Found valid armature: ", bone_node->mName.C_Str());
|
ASSIMP_LOG_DEBUG_F("GetArmatureRoot() Found valid armature: ", bone_node->mName.C_Str());
|
||||||
return bone_node;
|
return bone_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
bone_node = bone_node->mParent;
|
||||||
}
|
}
|
||||||
|
|
||||||
bone_node = bone_node->mParent;
|
ASSIMP_LOG_ERROR("GetArmatureRoot() can't find armature!");
|
||||||
}
|
|
||||||
|
return nullptr;
|
||||||
ASSIMP_LOG_ERROR("GetArmatureRoot() can't find armature!");
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Simple IsBoneNode check if this could be a bone
|
||||||
|
|
||||||
/* Simple IsBoneNode check if this could be a bone */
|
|
||||||
bool ArmaturePopulate::IsBoneNode(const aiString &bone_name,
|
bool ArmaturePopulate::IsBoneNode(const aiString &bone_name,
|
||||||
std::vector<aiBone *> &bones) {
|
std::vector<aiBone *> &bones) {
|
||||||
for (aiBone *bone : bones) {
|
for (aiBone *bone : bones) {
|
||||||
if (bone->mName == bone_name) {
|
if (bone->mName == bone_name) {
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pop this node by name from the stack if found */
|
// Pop this node by name from the stack if found
|
||||||
/* Used in multiple armature situations with duplicate node / bone names */
|
// Used in multiple armature situations with duplicate node / bone names
|
||||||
/* Known flaw: cannot have nodes with bone names, will be fixed in later release
|
// Known flaw: cannot have nodes with bone names, will be fixed in later release
|
||||||
*/
|
// (serious to be fixed) Known flaw: nodes which have more than one bone could
|
||||||
/* (serious to be fixed) Known flaw: nodes which have more than one bone could
|
// be prematurely dropped from stack
|
||||||
* be prematurely dropped from stack */
|
|
||||||
aiNode *ArmaturePopulate::GetNodeFromStack(const aiString &node_name,
|
aiNode *ArmaturePopulate::GetNodeFromStack(const aiString &node_name,
|
||||||
std::vector<aiNode *> &nodes) {
|
std::vector<aiNode *> &nodes) {
|
||||||
std::vector<aiNode *>::iterator iter;
|
std::vector<aiNode *>::iterator iter;
|
||||||
aiNode *found = nullptr;
|
aiNode *found = nullptr;
|
||||||
for (iter = nodes.begin(); iter < nodes.end(); ++iter) {
|
for (iter = nodes.begin(); iter < nodes.end(); ++iter) {
|
||||||
aiNode *element = *iter;
|
aiNode *element = *iter;
|
||||||
ai_assert(element);
|
ai_assert(element);
|
||||||
// node valid and node name matches
|
// node valid and node name matches
|
||||||
if (element->mName == node_name) {
|
if (element->mName == node_name) {
|
||||||
found = element;
|
found = element;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (found != nullptr) {
|
if (found != nullptr) {
|
||||||
ASSIMP_LOG_INFO_F("Removed node from stack: ", found->mName.C_Str());
|
ASSIMP_LOG_INFO_F("Removed node from stack: ", found->mName.C_Str());
|
||||||
// now pop the element from the node list
|
// now pop the element from the node list
|
||||||
nodes.erase(iter);
|
nodes.erase(iter);
|
||||||
|
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
// unique names can cause this problem
|
// unique names can cause this problem
|
||||||
ASSIMP_LOG_ERROR("[Serious] GetNodeFromStack() can't find node from stack!");
|
ASSIMP_LOG_ERROR("[Serious] GetNodeFromStack() can't find node from stack!");
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // Namespace Assimp
|
} // Namespace Assimp
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -137,8 +137,9 @@ public:
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
void Execute( aiScene* pScene);
|
void Execute( aiScene* pScene);
|
||||||
|
|
||||||
protected:
|
public:
|
||||||
void ProcessMesh( aiMesh* pMesh);
|
/** Some other types of post-processing require winding order flips */
|
||||||
|
static void ProcessMesh( aiMesh* pMesh);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
@ -128,7 +128,8 @@ bool EmbedTexturesProcess::addTexture(aiScene* pScene, std::string path) const {
|
||||||
auto oldTextures = pScene->mTextures;
|
auto oldTextures = pScene->mTextures;
|
||||||
pScene->mTextures = new aiTexture*[pScene->mNumTextures];
|
pScene->mTextures = new aiTexture*[pScene->mNumTextures];
|
||||||
::memmove(pScene->mTextures, oldTextures, sizeof(aiTexture*) * (pScene->mNumTextures - 1u));
|
::memmove(pScene->mTextures, oldTextures, sizeof(aiTexture*) * (pScene->mNumTextures - 1u));
|
||||||
|
delete [] oldTextures;
|
||||||
|
|
||||||
// Add the new texture
|
// Add the new texture
|
||||||
auto pTexture = new aiTexture;
|
auto pTexture = new aiTexture;
|
||||||
pTexture->mHeight = 0; // Means that this is still compressed
|
pTexture->mHeight = 0; // Means that this is still compressed
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2019, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue