Преглед изворни кода

Merge branch 'master' into kimkulling/add_md5_parser_check_issue-5257

Kim Kulling пре 1 година
родитељ
комит
ee0d8aa741

+ 5 - 5
CMakeLists.txt

@@ -49,13 +49,13 @@ option(ASSIMP_HUNTER_ENABLED "Enable Hunter package manager support" OFF)
 IF(ASSIMP_HUNTER_ENABLED)
   include("cmake-modules/HunterGate.cmake")
   HunterGate(
-    URL "https://github.com/cpp-pm/hunter/archive/v0.24.17.tar.gz"
-    SHA1 "e6396699e414120e32557fe92db097b7655b760b"
+    URL "https://github.com/cpp-pm/hunter/archive/v0.24.18.tar.gz"
+    SHA1 "1292e4d661e1770d6d6ca08c12c07cf34a0bf718"
   )
   add_definitions(-DASSIMP_USE_HUNTER)
 ENDIF()
 
-PROJECT(Assimp VERSION 5.2.5)
+PROJECT(Assimp VERSION 5.3.0)
 
 # All supported options ###############################################
 
@@ -258,7 +258,7 @@ IF( UNIX )
 ENDIF()
 
 # Grouped compiler settings ########################################
-IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT MINGW)
+IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT MINGW AND NOT HAIKU)
   IF(NOT ASSIMP_HUNTER_ENABLED)
     SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
   ENDIF()
@@ -777,7 +777,7 @@ IF ( ASSIMP_INSTALL )
     SET(CPACK_DEBIAN_PACKAGE_SECTION  "libs" )
     SET(CPACK_DEBIAN_PACKAGE_DEPENDS  "${CPACK_COMPONENTS_ALL}")
     SET(CPACK_DEBIAN_PACKAGE_SUGGESTS)
-    SET(cPACK_DEBIAN_PACKAGE_NAME     "assimp")
+    SET(CPACK_DEBIAN_PACKAGE_NAME     "assimp")
     SET(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES contrib/gtest contrib/zlib workspaces test doc obj samples packaging)
     SET(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force)
     SET(CPACK_DEBIAN_CHANGELOG)

+ 23 - 13
code/Common/Version.cpp

@@ -3,7 +3,7 @@
 Open Asset Import Library (assimp)
 ---------------------------------------------------------------------------
 
-Copyright (c) 2006-2022, assimp team
+Copyright (c) 2006-2023, assimp team
 
 All rights reserved.
 
@@ -49,10 +49,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 // --------------------------------------------------------------------------------
 // Legal information string - don't remove this.
-static const char *LEGAL_INFORMATION =
+static constexpr char LEGAL_INFORMATION[] =
         "Open Asset Import Library (Assimp).\n"
         "A free C/C++ library to import various 3D file formats into applications\n\n"
-        "(c) 2006-2022, Assimp team\n"
+        "(c) 2006-2023, Assimp team\n"
         "License under the terms and conditions of the 3-clause BSD license\n"
         "https://www.assimp.org\n";
 
@@ -150,9 +150,11 @@ ASSIMP_API aiScene::~aiScene() {
     // To make sure we won't crash if the data is invalid it's
     // much better to check whether both mNumXXX and mXXX are
     // valid instead of relying on just one of them.
-    if (mNumMeshes && mMeshes)
-        for (unsigned int a = 0; a < mNumMeshes; a++)
+    if (mNumMeshes && mMeshes) {
+        for (unsigned int a = 0; a < mNumMeshes; ++a) {
             delete mMeshes[a];
+        }
+    }
     delete[] mMeshes;
 
     if (mNumMaterials && mMaterials) {
@@ -162,24 +164,32 @@ ASSIMP_API aiScene::~aiScene() {
     }
     delete[] mMaterials;
 
-    if (mNumAnimations && mAnimations)
-        for (unsigned int a = 0; a < mNumAnimations; a++)
+    if (mNumAnimations && mAnimations) {
+        for (unsigned int a = 0; a < mNumAnimations; ++a) {
             delete mAnimations[a];
+        }
+    }
     delete[] mAnimations;
 
-    if (mNumTextures && mTextures)
-        for (unsigned int a = 0; a < mNumTextures; a++)
+    if (mNumTextures && mTextures) {
+        for (unsigned int a = 0; a < mNumTextures; ++a) {
             delete mTextures[a];
+        }
+    }
     delete[] mTextures;
 
-    if (mNumLights && mLights)
-        for (unsigned int a = 0; a < mNumLights; a++)
+    if (mNumLights && mLights) {
+        for (unsigned int a = 0; a < mNumLights; ++a) {
             delete mLights[a];
+        }
+    }
     delete[] mLights;
 
-    if (mNumCameras && mCameras)
-        for (unsigned int a = 0; a < mNumCameras; a++)
+    if (mNumCameras && mCameras) {
+        for (unsigned int a = 0; a < mNumCameras; ++a) {
             delete mCameras[a];
+        }
+    }
     delete[] mCameras;
 
     aiMetadata::Dealloc(mMetaData);

+ 25 - 30
code/PostProcessing/JoinVerticesProcess.cpp

@@ -53,6 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <stdio.h>
 #include <unordered_set>
 #include <unordered_map>
+#include <memory>
 
 using namespace Assimp;
 
@@ -145,7 +146,7 @@ bool areVerticesEqual(
 }
 
 template<class XMesh>
-void updateXMeshVertices(XMesh *pMesh, std::vector<Vertex> &uniqueVertices) {
+void updateXMeshVertices(XMesh *pMesh, std::vector<int> &uniqueVertices) {
     // replace vertex data with the unique data sets
     pMesh->mNumVertices = (unsigned int)uniqueVertices.size();
 
@@ -156,53 +157,47 @@ void updateXMeshVertices(XMesh *pMesh, std::vector<Vertex> &uniqueVertices) {
     // ----------------------------------------------------------------------------
 
     // Position, if present (check made for aiAnimMesh)
-    if (pMesh->mVertices) {
-        delete [] pMesh->mVertices;
+    if (pMesh->mVertices) {  
+        std::unique_ptr<aiVector3D[]> oldVertices(pMesh->mVertices);
         pMesh->mVertices = new aiVector3D[pMesh->mNumVertices];
-        for (unsigned int a = 0; a < pMesh->mNumVertices; a++) {
-            pMesh->mVertices[a] = uniqueVertices[a].position;
-        }
+        for (unsigned int a = 0; a < pMesh->mNumVertices; a++)
+            pMesh->mVertices[a] = oldVertices[uniqueVertices[a]];
     }
 
     // Normals, if present
     if (pMesh->mNormals) {
-        delete [] pMesh->mNormals;
+        std::unique_ptr<aiVector3D[]> oldNormals(pMesh->mNormals);
         pMesh->mNormals = new aiVector3D[pMesh->mNumVertices];
-        for( unsigned int a = 0; a < pMesh->mNumVertices; a++) {
-            pMesh->mNormals[a] = uniqueVertices[a].normal;
-        }
+        for (unsigned int a = 0; a < pMesh->mNumVertices; a++)
+            pMesh->mNormals[a] = oldNormals[uniqueVertices[a]];
     }
     // Tangents, if present
     if (pMesh->mTangents) {
-        delete [] pMesh->mTangents;
+        std::unique_ptr<aiVector3D[]> oldTangents(pMesh->mTangents);
         pMesh->mTangents = new aiVector3D[pMesh->mNumVertices];
-        for (unsigned int a = 0; a < pMesh->mNumVertices; a++) {
-            pMesh->mTangents[a] = uniqueVertices[a].tangent;
-        }
+        for (unsigned int a = 0; a < pMesh->mNumVertices; a++)
+            pMesh->mTangents[a] = oldTangents[uniqueVertices[a]];
     }
     // Bitangents as well
     if (pMesh->mBitangents) {
-        delete [] pMesh->mBitangents;
+        std::unique_ptr<aiVector3D[]> oldBitangents(pMesh->mBitangents);
         pMesh->mBitangents = new aiVector3D[pMesh->mNumVertices];
-        for (unsigned int a = 0; a < pMesh->mNumVertices; a++) {
-            pMesh->mBitangents[a] = uniqueVertices[a].bitangent;
-        }
+        for (unsigned int a = 0; a < pMesh->mNumVertices; a++)
+            pMesh->mBitangents[a] = oldBitangents[uniqueVertices[a]];
     }
     // Vertex colors
     for (unsigned int a = 0; pMesh->HasVertexColors(a); a++) {
-        delete [] pMesh->mColors[a];
+        std::unique_ptr<aiColor4D[]> oldColors(pMesh->mColors[a]);
         pMesh->mColors[a] = new aiColor4D[pMesh->mNumVertices];
-        for( unsigned int b = 0; b < pMesh->mNumVertices; b++) {
-            pMesh->mColors[a][b] = uniqueVertices[b].colors[a];
-        }
+        for (unsigned int b = 0; b < pMesh->mNumVertices; b++)
+            pMesh->mColors[a][b] = oldColors[uniqueVertices[b]];
     }
     // Texture coords
     for (unsigned int a = 0; pMesh->HasTextureCoords(a); a++) {
-        delete [] pMesh->mTextureCoords[a];
+        std::unique_ptr<aiVector3D[]> oldTextureCoords(pMesh->mTextureCoords[a]);
         pMesh->mTextureCoords[a] = new aiVector3D[pMesh->mNumVertices];
-        for (unsigned int b = 0; b < pMesh->mNumVertices; b++) {
-            pMesh->mTextureCoords[a][b] = uniqueVertices[b].texcoords[a];
-        }
+        for (unsigned int b = 0; b < pMesh->mNumVertices; b++)
+            pMesh->mTextureCoords[a][b] = oldTextureCoords[uniqueVertices[b]];
     }
 }
 
@@ -270,7 +265,7 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
     }
 
     // We'll never have more vertices afterwards.
-    std::vector<Vertex> uniqueVertices;
+    std::vector<int> uniqueVertices;
     uniqueVertices.reserve( pMesh->mNumVertices);
 
     // For each vertex the index of the vertex it was replaced by.
@@ -311,7 +306,7 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
     const bool hasAnimMeshes = pMesh->mNumAnimMeshes > 0;
 
     // We'll never have more vertices afterwards.
-    std::vector<std::vector<Vertex>> uniqueAnimatedVertices;
+    std::vector<std::vector<int>> uniqueAnimatedVertices;
     if (hasAnimMeshes) {
         uniqueAnimatedVertices.resize(pMesh->mNumAnimMeshes);
         for (unsigned int animMeshIndex = 0; animMeshIndex < pMesh->mNumAnimMeshes; animMeshIndex++) {
@@ -345,10 +340,10 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
             //keep track of its index and increment 1
             replaceIndex[a] = newIndex++;
             // add the vertex to the unique vertices
-            uniqueVertices.push_back(v);
+            uniqueVertices.push_back(a);
             if (hasAnimMeshes) {
                 for (unsigned int animMeshIndex = 0; animMeshIndex < pMesh->mNumAnimMeshes; animMeshIndex++) {
-                    uniqueAnimatedVertices[animMeshIndex].emplace_back(pMesh->mAnimMeshes[animMeshIndex], a);
+                    uniqueAnimatedVertices[animMeshIndex].emplace_back(a);
                 }
             }
         } else{

+ 1 - 1
contrib/unzip/ioapi.h

@@ -50,7 +50,7 @@
 #define ftello64 ftell
 #define fseeko64 fseek
 #else
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__)
 #define fopen64 fopen
 #define ftello64 ftello
 #define fseeko64 fseeko

+ 2 - 2
contrib/zip/src/zip.h

@@ -83,9 +83,9 @@ typedef long ssize_t; /* byte count or error */
 #define ZIP_EFWRITE -29     // fwrite error
 
 /**
- * Looks up the error message string coresponding to an error number.
+ * Looks up the error message string corresponding to an error number.
  * @param errnum error number
- * @return error message string coresponding to errnum or NULL if error is not
+ * @return error message string corresponding to errnum or NULL if error is not
  * found.
  */
 extern const char *zip_strerror(int errnum);

+ 11 - 17
include/assimp/types.h

@@ -73,14 +73,8 @@ typedef uint32_t ai_uint32;
 
 #ifdef __cplusplus
 
-#ifdef ASSIMP_USE_HUNTER
-#   include <utf8.h>
-#else
-#   include "../contrib/utf8cpp/source/utf8.h"
-#endif
-
 #include <cstring>
-#include <new> // for std::nothrow_t
+#include <new>    // for std::nothrow_t
 #include <string> // for aiString::Set(const std::string&)
 
 namespace Assimp {
@@ -88,16 +82,16 @@ namespace Assimp {
 namespace Intern {
 // --------------------------------------------------------------------
 /** @brief Internal helper class to utilize our internal new/delete
-     *    routines for allocating object of this and derived classes.
-     *
-     * By doing this you can safely share class objects between Assimp
-     * and the application - it works even over DLL boundaries. A good
-     * example is the #IOSystem where the application allocates its custom
-     * #IOSystem, then calls #Importer::SetIOSystem(). When the Importer
-     * destructs, Assimp calls operator delete on the stored #IOSystem.
-     * If it lies on a different heap than Assimp is working with,
-     * the application is determined to crash.
-     */
+ *    routines for allocating object of this and derived classes.
+ *
+ * By doing this you can safely share class objects between Assimp
+ * and the application - it works even over DLL boundaries. A good
+ * example is the #IOSystem where the application allocates its custom
+ * #IOSystem, then calls #Importer::SetIOSystem(). When the Importer
+ * destructs, Assimp calls operator delete on the stored #IOSystem.
+ * If it lies on a different heap than Assimp is working with,
+ * the application is determined to crash.
+ */
 // --------------------------------------------------------------------
 #ifndef SWIG
 struct ASSIMP_API AllocateFromAssimpHeap {

+ 1 - 1
include/assimp/version.h

@@ -3,7 +3,7 @@
 Open Asset Import Library (assimp)
 ---------------------------------------------------------------------------
 
-Copyright (c) 2006-2022, assimp team
+Copyright (c) 2006-2023, assimp team
 
 All rights reserved.
 

+ 4 - 4
packaging/windows-innosetup/script_vieweronly.iss

@@ -2,7 +2,7 @@
 
 [Setup]
 AppName=Open Asset Import Library - Viewer
-AppVerName=Open Asset Import Library - Viewer (v2.0)
+AppVerName=Open Asset Import Library - Viewer (v5.3.0)
 DefaultDirName={pf}\AssimpView
 DefaultGroupName=AssimpView
 UninstallDisplayIcon={app}\bin\x86\assimp.exe
@@ -12,9 +12,9 @@ SetupIconFile=..\..\tools\shared\assimp_tools_icon.ico
 WizardImageFile=compiler:WizModernImage-IS.BMP
 WizardSmallImageFile=compiler:WizModernSmallImage-IS.BMP
 LicenseFile=License.rtf
-OutputBaseFileName=assimp-view-2.0-setup
-VersionInfoVersion=2.0.0.0
-VersionInfoTextVersion=2.0
+OutputBaseFileName=assimp-view-5.0-setup
+VersionInfoVersion=5.3.0.0
+VersionInfoTextVersion=5.3.0
 VersionInfoCompany=Assimp Development Team
 ArchitecturesInstallIn64BitMode=x64
 

+ 4 - 4
packaging/windows-innosetup/script_x64.iss

@@ -2,7 +2,7 @@
 
 [Setup]
 AppName=Open Asset Import Library - SDK
-AppVerName=Open Asset Import Library - SDK (v5.1.0)
+AppVerName=Open Asset Import Library - SDK (v5.3.0)
 DefaultDirName={pf}\Assimp
 DefaultGroupName=Assimp
 UninstallDisplayIcon={app}\bin\x64\assimp.exe
@@ -12,9 +12,9 @@ SetupIconFile=..\..\tools\shared\assimp_tools_icon.ico
 WizardImageFile=compiler:WizModernImage-IS.BMP
 WizardSmallImageFile=compiler:WizModernSmallImage-IS.BMP
 LicenseFile=License.rtf
-OutputBaseFileName=assimp-sdk-5.1.0-setup
-VersionInfoVersion=5.1.0.0
-VersionInfoTextVersion=5.1.0
+OutputBaseFileName=assimp-sdk-5.2.6-setup
+VersionInfoVersion=5.3.0.0
+VersionInfoTextVersion=5.3.0
 VersionInfoCompany=Assimp Development Team
 ArchitecturesInstallIn64BitMode=x64
 

+ 4 - 4
packaging/windows-innosetup/script_x86.iss

@@ -2,7 +2,7 @@
 
 [Setup]
 AppName=Open Asset Import Library - SDK
-AppVerName=Open Asset Import Library - SDK (v5.1.0)
+AppVerName=Open Asset Import Library - SDK (v5.3.0)
 DefaultDirName={pf}\Assimp
 DefaultGroupName=Assimp
 UninstallDisplayIcon={app}\bin\x86\assimp.exe
@@ -12,9 +12,9 @@ SetupIconFile=..\..\tools\shared\assimp_tools_icon.ico
 WizardImageFile=compiler:WizModernImage-IS.BMP
 WizardSmallImageFile=compiler:WizModernSmallImage-IS.BMP
 LicenseFile=License.rtf
-OutputBaseFileName=assimp-sdk-5.1.0-setup
-VersionInfoVersion=5.1.0.0
-VersionInfoTextVersion=5.1.0
+OutputBaseFileName=assimp-sdk-5.2.6-setup
+VersionInfoVersion=5.3.0.
+VersionInfoTextVersion=5.3.0
 VersionInfoCompany=Assimp Development Team
 ;ArchitecturesInstallIn64BitMode=x64
 

+ 1 - 1
revision.h.in

@@ -18,7 +18,7 @@
 #else
 #define VER_FILEVERSION_STR         STR(VER_MAJOR) "." STR(VER_MINOR) "." STR(VER_PATCH) "." STR(VER_BUILD) " (Commit @GIT_COMMIT_HASH@)"
 #endif
-#define VER_COPYRIGHT_STR           "\xA9 2006-2022"
+#define VER_COPYRIGHT_STR           "\xA9 2006-2023"
 
 #ifdef  NDEBUG
 #define VER_ORIGINAL_FILENAME_STR   "@CMAKE_SHARED_LIBRARY_PREFIX@assimp@[email protected]"

+ 1 - 1
test/models-nonbsd/IFC/linklist.txt

@@ -1,4 +1,4 @@
 Good IFC test cases
 ===================
 
-http://www.iai.fzk.de/www-extern/index.php?id=1135
+https://www.ifcwiki.org/index.php/Examples

+ 4 - 4
test/unit/utVersion.cpp

@@ -2,7 +2,7 @@
 Open Asset Import Library (assimp)
 ---------------------------------------------------------------------------
 
-Copyright (c) 2006-2022, assimp team
+Copyright (c) 2006-2023, assimp team
 
 All rights reserved.
 
@@ -48,12 +48,12 @@ TEST_F( utVersion, aiGetLegalStringTest ) {
     EXPECT_NE( lv, nullptr );
     std::string text( lv );
 
-    size_t pos = text.find(std::string("2022"));
+    size_t pos = text.find(std::string("2023"));
     EXPECT_NE(pos, std::string::npos);
 }
 
 TEST_F( utVersion, aiGetVersionMinorTest ) {
-    EXPECT_EQ(aiGetVersionMinor(), 2U);
+    EXPECT_EQ(aiGetVersionMinor(), 3U);
 }
 
 TEST_F( utVersion, aiGetVersionMajorTest ) {
@@ -61,7 +61,7 @@ TEST_F( utVersion, aiGetVersionMajorTest ) {
 }
 
 TEST_F( utVersion, aiGetVersionPatchTest ) {
-    EXPECT_EQ(aiGetVersionPatch(), 5U );
+    EXPECT_EQ(aiGetVersionPatch(), 0U );
 }
 
 TEST_F( utVersion, aiGetCompileFlagsTest ) {