diff --git a/Build.md b/Build.md index d6abe7b67..f48f50495 100644 --- a/Build.md +++ b/Build.md @@ -14,7 +14,8 @@ The assimp port in vcpkg is kept up to date by Microsoft team members and commun ## Install on Ubuntu You can install the Asset-Importer-Lib via apt: ``` -sudo apt-get install assimp +sudp apt-get update +sudo apt-get install libassimp-dev ``` ## Install pyassimp diff --git a/CMakeLists.txt b/CMakeLists.txt index 2aa66421c..a4f711528 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,7 +90,7 @@ OPTION( ASSIMP_BUILD_ZLIB ) OPTION( ASSIMP_BUILD_ASSIMP_TOOLS "If the supplementary tools for Assimp are built in addition to the library." - ON + OFF ) OPTION ( ASSIMP_BUILD_SAMPLES "If the official samples are built as well (needs Glut)." diff --git a/code/AssetLib/OpenGEX/OpenGEXImporter.cpp b/code/AssetLib/OpenGEX/OpenGEXImporter.cpp index c8e47933d..2883f9612 100644 --- a/code/AssetLib/OpenGEX/OpenGEXImporter.cpp +++ b/code/AssetLib/OpenGEX/OpenGEXImporter.cpp @@ -151,45 +151,46 @@ namespace Grammar { } static TokenType matchTokenType(const char *tokenType) { - if (MetricType == tokenType) { + const size_t len = std::strlen(tokenType); + if (0 == strncmp(MetricType, tokenType, len)) { return MetricToken; - } else if (NameType == tokenType) { + } else if (0 == strncmp(NameType, tokenType, len)) { return NameToken; - } else if (ObjectRefType == tokenType) { + } else if (0 == strncmp(ObjectRefType, tokenType, len)) { return ObjectRefToken; - } else if (MaterialRefType == tokenType) { + } else if (0 == strncmp(MaterialRefType, tokenType, len)) { return MaterialRefToken; - } else if (MetricKeyType == tokenType) { + } else if (0 == strncmp(MetricKeyType, tokenType, len)) { return MetricKeyToken; - } else if (GeometryNodeType == tokenType) { + } else if (0 == strncmp(GeometryNodeType, tokenType, len)) { return GeometryNodeToken; - } else if (CameraNodeType == tokenType) { + } else if (0 == strncmp(CameraNodeType, tokenType, len)) { return CameraNodeToken; - } else if (LightNodeType == tokenType) { + } else if (0 == strncmp(LightNodeType, tokenType, len)) { return LightNodeToken; - } else if (GeometryObjectType == tokenType) { + } else if (0 == strncmp(GeometryObjectType, tokenType, len)) { return GeometryObjectToken; - } else if (CameraObjectType == tokenType) { + } else if (0 == strncmp(CameraObjectType, tokenType, len)) { return CameraObjectToken; - } else if (LightObjectType == tokenType) { + } else if (0 == strncmp(LightObjectType, tokenType, len)) { return LightObjectToken; - } else if (TransformType == tokenType) { + } else if (0 == strncmp(TransformType, tokenType, len)) { return TransformToken; - } else if (MeshType == tokenType) { + } else if (0 == strncmp(MeshType, tokenType, len)) { return MeshToken; - } else if (VertexArrayType == tokenType) { + } else if (0 == strncmp(VertexArrayType, tokenType, len)) { return VertexArrayToken; - } else if (IndexArrayType == tokenType) { + } else if (0 == strncmp(IndexArrayType, tokenType, len)) { return IndexArrayToken; - } else if (MaterialType == tokenType) { + } else if (0 == strncmp(MaterialType, tokenType, len)) { return MaterialToken; - } else if (ColorType == tokenType) { + } else if (0 == strncmp(ColorType, tokenType, len)) { return ColorToken; - } else if (ParamType == tokenType) { + } else if (0 == strncmp(ParamType, tokenType, len)) { return ParamToken; - } else if (TextureType == tokenType) { + } else if (0 == strncmp(TextureType, tokenType, len)) { return TextureToken; - } else if (AttenType == tokenType) { + } else if (0 == strncmp(AttenType, tokenType, len)) { return AttenToken; } @@ -256,11 +257,6 @@ OpenGEXImporter::RefInfo::RefInfo(aiNode *node, Type type, std::vector m_Names; RefInfo( aiNode *node, Type type, std::vector &names ); - ~RefInfo(); + ~RefInfo() = default; RefInfo( const RefInfo & ) = delete; RefInfo &operator = ( const RefInfo & ) = delete; diff --git a/code/Common/DefaultIOStream.cpp b/code/Common/DefaultIOStream.cpp index 17fc44f9a..f2c772187 100644 --- a/code/Common/DefaultIOStream.cpp +++ b/code/Common/DefaultIOStream.cpp @@ -63,7 +63,7 @@ inline int select_fseek(FILE *file, int64_t offset, int origin) { -#if defined _WIN64 && (!defined __GNUC__ || __MSVCRT_VERSION__ >= 0x0601) +#if defined _WIN32 && (!defined __GNUC__ || !defined __CLANG__ && __MSVCRT_VERSION__ >= 0x0601) template <> inline size_t select_ftell<8>(FILE *file) { return (size_t)::_ftelli64(file); @@ -74,7 +74,7 @@ inline int select_fseek<8>(FILE *file, int64_t offset, int origin) { return ::_fseeki64(file, offset, origin); } -#endif // #if defined _WIN32 && (!defined __GNUC__ || __MSVCRT_VERSION__ >= 0x0601) +#endif } // namespace @@ -149,13 +149,20 @@ size_t DefaultIOStream::FileSize() const { // // See here for details: // https://www.securecoding.cert.org/confluence/display/seccode/FIO19-C.+Do+not+use+fseek()+and+ftell()+to+compute+the+size+of+a+regular+file -#if defined _WIN64 && (!defined __GNUC__ || __MSVCRT_VERSION__ >= 0x0601) +#if defined _WIN32 && (!defined __GNUC__ || !defined __CLANG__ && __MSVCRT_VERSION__ >= 0x0601) struct __stat64 fileStat; //using fileno + fstat avoids having to handle the filename int err = _fstat64(_fileno(mFile), &fileStat); if (0 != err) return 0; mCachedSize = (size_t)(fileStat.st_size); +#elif defined _WIN32 + struct _stat32 fileStat; + //using fileno + fstat avoids having to handle the filename + int err = _fstat32(_fileno(mFile), &fileStat); + if (0 != err) + return 0; + mCachedSize = (size_t)(fileStat.st_size); #elif defined __GNUC__ || defined __APPLE__ || defined __MACH__ || defined __FreeBSD__ struct stat fileStat; int err = stat(mFilename.c_str(), &fileStat); diff --git a/code/PostProcessing/EmbedTexturesProcess.cpp b/code/PostProcessing/EmbedTexturesProcess.cpp index 2f80c908e..7ac4ddd4e 100644 --- a/code/PostProcessing/EmbedTexturesProcess.cpp +++ b/code/PostProcessing/EmbedTexturesProcess.cpp @@ -128,7 +128,7 @@ bool EmbedTexturesProcess::addTexture(aiScene *pScene, const std::string &path) aiTexel* imageContent = new aiTexel[ 1ul + static_cast( imageSize ) / sizeof(aiTexel)]; pFile->Seek(0, aiOrigin_SET); - pFile->Read(reinterpret_cast(imageContent), imageSize, 1); + pFile->Read(reinterpret_cast(imageContent), static_cast(imageSize), 1); mIOHandler->Close(pFile); // Enlarging the textures table diff --git a/code/res/assimp.rc b/code/res/assimp.rc index c36d812f8..fd10935f6 100644 --- a/code/res/assimp.rc +++ b/code/res/assimp.rc @@ -1,5 +1,9 @@ #include "revision.h" +#ifdef __GNUC__ +#include "winresrc.h" +#else #include "winres.h" +#endif LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #pragma code_page(1252) diff --git a/test/unit/utOpenGEXImportExport.cpp b/test/unit/utOpenGEXImportExport.cpp index a7b682063..ed22a6fb7 100644 --- a/test/unit/utOpenGEXImportExport.cpp +++ b/test/unit/utOpenGEXImportExport.cpp @@ -40,6 +40,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "AbstractImportExportBase.h" + +#include #include "UnitTestPCH.h" #include @@ -51,11 +53,12 @@ public: bool importerTest() override { Assimp::Importer importer; const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OpenGEX/Example.ogex", 0); + EXPECT_EQ(1u, scene->mNumMeshes); return nullptr != scene; } }; -TEST_F(utOpenGEXImportExport, importLWSFromFileTest) { +TEST_F(utOpenGEXImportExport, importOpenGexFromFileTest) { EXPECT_TRUE(importerTest()); }