Compare commits
67 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f9f1c36f2 | ||
|
|
d70b66d8fe | ||
|
|
5cacab3fd7 | ||
|
|
3a13f18407 | ||
|
|
068be93c1c | ||
|
|
4469c3c65b | ||
|
|
c9a5f7310c | ||
|
|
4aa7296a0a | ||
|
|
e99d3401b5 | ||
|
|
12cc8a4445 | ||
|
|
80fe326abc | ||
|
|
3a42df86a2 | ||
|
|
b3fa9c1d57 | ||
|
|
49901f8079 | ||
|
|
8cd41a5618 | ||
|
|
5ef27d009c | ||
|
|
e5e96945e2 | ||
|
|
a47b41f26d | ||
|
|
98ede03e7c | ||
|
|
41c8bc20b9 | ||
|
|
c6758b2144 | ||
|
|
814f62525c | ||
|
|
1170228628 | ||
|
|
1ac0cb353d | ||
|
|
30ad66683b | ||
|
|
760d443dae | ||
|
|
a119cb971f | ||
|
|
0b9c80100d | ||
|
|
603f5dbba8 | ||
|
|
2fbf9e06a9 | ||
|
|
b25065f086 | ||
|
|
20482f2b12 | ||
|
|
33f0991ae3 | ||
|
|
b9d3cbace5 | ||
|
|
ef89f0abc0 | ||
|
|
ea12704921 | ||
|
|
066ef04fce | ||
|
|
11d75200c8 | ||
|
|
cb2670101d | ||
|
|
2a4a70ecb9 | ||
|
|
7d2214ecba | ||
|
|
951ad340be | ||
|
|
33de26c23b | ||
|
|
04fd9a1170 | ||
|
|
37df57e17a | ||
|
|
42edbb53f5 | ||
|
|
028704e098 | ||
|
|
463ff348a4 | ||
|
|
21b4583462 | ||
|
|
e88e96e5d1 | ||
|
|
4322cd006a | ||
|
|
5c23ca982d | ||
|
|
b6946fb354 | ||
|
|
a1149c24bf | ||
|
|
3f799c9906 | ||
|
|
79a1733fe7 | ||
|
|
1f1b718371 | ||
|
|
7d43d0a5fc |
||
|
|
ddec090613 | ||
|
|
fb414da238 | ||
|
|
aefa6cfa8d | ||
|
|
56fdc2c37d | ||
|
|
d52aa21924 | ||
|
|
3e62a91b4c | ||
|
|
6e3109cbaf | ||
|
|
9f5dcf048d | ||
|
|
8482203cf0 |
19 changed files with 691 additions and 1883 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -4,3 +4,8 @@
|
|||
/assimp-f849f6d9bd21efe802fa456184b1c3173e74a050-free.tar.bz2
|
||||
/assimp-3.1.1_no_test_models.zip
|
||||
/assimp-c318d648ff73aa2e32b783709d69740ac3e8c072-free.tar.bz2
|
||||
/assimp-5.0.1-free.tar.xz
|
||||
/assimp-5.2.5-free.tar.xz
|
||||
/assimp-5.3.1-free.tar.xz
|
||||
/assimp-5.4.3-free.tar.xz
|
||||
/assimp-6.0.2-free.tar.xz
|
||||
|
|
|
|||
|
|
@ -1,286 +0,0 @@
|
|||
From a52bb1d9b030ee888ab44b8ad9a2a2b8ebb909a3 Mon Sep 17 00:00:00 2001
|
||||
From: Helio Chissini de Castro <helio@kde.org>
|
||||
Date: Thu, 27 Apr 2017 17:19:51 +0200
|
||||
Subject: [PATCH] - Apply mechanism to decide use for IrrXML external or
|
||||
internal
|
||||
|
||||
Several distributions usually decide for shared external libraries
|
||||
instead of an usual embedded, for security reasons, duplicatiion issues.
|
||||
This change enable the possibility to set SYSTEM_IRRXML=ON for detect
|
||||
and build against a system installed irrxml.
|
||||
By default, the internal copy is compiled.
|
||||
|
||||
Changes on build:
|
||||
- Added a FindIrrXML cmake module.
|
||||
- Moved the source recipe for proper CMakeLists inside contrib directory
|
||||
- Includes aren't path based anymore, using the provided INCLUDE_DIR
|
||||
- Compiler option are grouped in a singled entry on main CMakeLists
|
||||
---
|
||||
CMakeLists.txt | 88 +++++++++++++++++++++++++++++++++++-------
|
||||
cmake-modules/FindIrrXML.cmake | 17 ++++++++
|
||||
code/CMakeLists.txt | 20 +++-------
|
||||
code/irrXMLWrapper.h | 6 +--
|
||||
contrib/CMakeLists.txt | 4 ++
|
||||
contrib/irrXML/CMakeLists.txt | 13 +++++++
|
||||
6 files changed, 116 insertions(+), 32 deletions(-)
|
||||
create mode 100644 cmake-modules/FindIrrXML.cmake
|
||||
create mode 100644 contrib/CMakeLists.txt
|
||||
create mode 100644 contrib/irrXML/CMakeLists.txt
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 6989510..c2b3faa 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -39,7 +39,65 @@ SET(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
|
||||
cmake_minimum_required( VERSION 2.8 )
|
||||
PROJECT( Assimp )
|
||||
|
||||
-OPTION(BUILD_SHARED_LIBS "Build package with shared libraries." ON)
|
||||
+# All supported options ###############################################
|
||||
+OPTION( BUILD_SHARED_LIBS
|
||||
+ "Build package with shared libraries."
|
||||
+ ON
|
||||
+)
|
||||
+OPTION( ASSIMP_DOUBLE_PRECISION
|
||||
+ "Set to ON to enable double precision processing"
|
||||
+ OFF
|
||||
+)
|
||||
+OPTION( ASSIMP_OPT_BUILD_PACKAGES
|
||||
+ "Set to ON to generate CPack configuration files and packaging targets"
|
||||
+ OFF
|
||||
+)
|
||||
+OPTION( ASSIMP_ANDROID_JNIIOSYSTEM
|
||||
+ "Android JNI IOSystem support is active"
|
||||
+ OFF
|
||||
+)
|
||||
+OPTION( ASSIMP_NO_EXPORT
|
||||
+ "Disable Assimp's export functionality."
|
||||
+ OFF
|
||||
+)
|
||||
+OPTION( ASSIMP_BUILD_ZLIB
|
||||
+ "Build your own zlib"
|
||||
+ OFF
|
||||
+)
|
||||
+option( ASSIMP_BUILD_ASSIMP_TOOLS
|
||||
+ "If the supplementary tools for Assimp are built in addition to the library."
|
||||
+ ON
|
||||
+)
|
||||
+option ( ASSIMP_BUILD_SAMPLES
|
||||
+ "If the official samples are built as well (needs Glut)."
|
||||
+ OFF
|
||||
+)
|
||||
+OPTION ( ASSIMP_BUILD_TESTS
|
||||
+ "If the test suite for Assimp is built in addition to the library."
|
||||
+ ON
|
||||
+)
|
||||
+OPTION ( ASSIMP_COVERALLS
|
||||
+ "Eańable this to measure test coverage."
|
||||
+ OFF
|
||||
+)
|
||||
+
|
||||
+option ( SYSTEM_IRRXML
|
||||
+ "Use system installed Irrlicht/IrrXML library."
|
||||
+ OFF
|
||||
+)
|
||||
+
|
||||
+#OPTION ( BUILD_DOCS
|
||||
+# "Build documentation using Doxygen."
|
||||
+# OFF
|
||||
+#)
|
||||
+
|
||||
+IF(MSVC)
|
||||
+ set (CMAKE_PREFIX_PATH "D:\\libs\\devil")
|
||||
+ OPTION( ASSIMP_INSTALL_PDB
|
||||
+ "Install MSVC debug files."
|
||||
+ ON
|
||||
+ )
|
||||
+ENDIF(MSVC)
|
||||
|
||||
IF(NOT BUILD_SHARED_LIBS)
|
||||
SET(LINK_SEARCH_START_STATIC TRUE)
|
||||
@@ -116,17 +174,17 @@ IF( UNIX )
|
||||
include(GNUInstallDirs)
|
||||
ENDIF( UNIX )
|
||||
|
||||
-IF((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT CMAKE_COMPILER_IS_MINGW)
|
||||
- IF (BUILD_SHARED_LIBS AND CMAKE_SIZEOF_VOID_P EQUAL 8) # -fPIC is only required for shared libs on 64 bit
|
||||
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
- ENDIF()
|
||||
+# Grouped compiler settings
|
||||
+IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT CMAKE_COMPILER_IS_MINGW)
|
||||
# hide all not-exported symbols
|
||||
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Wall -std=c++0x" )
|
||||
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fvisibility=hidden -fPIC -Wall -std=c++0x" )
|
||||
+ SET(LIBSTDC++_LIBRARIES -lstdc++)
|
||||
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC" )
|
||||
ELSEIF(MSVC)
|
||||
# enable multi-core compilation with MSVC
|
||||
add_compile_options(/MP)
|
||||
-ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Wall -Wno-long-long -pedantic -std=c++11" )
|
||||
+ELSEIF ( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
|
||||
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fvisibility=hidden -fPIC -Wall -Wno-long-long -pedantic -std=c++11" )
|
||||
ELSEIF( CMAKE_COMPILER_IS_MINGW )
|
||||
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Wall -Wno-long-long -pedantic -std=c++11" )
|
||||
ENDIF()
|
||||
@@ -176,14 +233,14 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" "${C
|
||||
|
||||
FIND_PACKAGE( DirectX )
|
||||
|
||||
-OPTION ( ASSIMP_NO_EXPORT
|
||||
- "Disable Assimp's export functionality."
|
||||
- OFF
|
||||
-)
|
||||
+#IF( BUILD_DOCS )
|
||||
+# add_subdirectory(doc)
|
||||
+#ENDIF( BUILD_DOCS )
|
||||
|
||||
-IF( CMAKE_COMPILER_IS_GNUCXX )
|
||||
- SET(LIBSTDC++_LIBRARIES -lstdc++)
|
||||
-ENDIF( CMAKE_COMPILER_IS_GNUCXX )
|
||||
+# Look for system installed irrXML
|
||||
+IF ( SYSTEM_IRRXML )
|
||||
+ find_package( IrrXML REQUIRED )
|
||||
+ENDIF( SYSTEM_IRRXML )
|
||||
|
||||
# Search for external dependencies, and build them from source if not found
|
||||
# Search for zlib
|
||||
@@ -287,6 +344,7 @@ ELSE (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
|
||||
ADD_DEFINITIONS( -DASSIMP_BUILD_NO_C4D_IMPORTER )
|
||||
ENDIF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
|
||||
|
||||
+ADD_SUBDIRECTORY(contrib)
|
||||
|
||||
ADD_SUBDIRECTORY( code/ )
|
||||
option ( ASSIMP_BUILD_ASSIMP_TOOLS
|
||||
diff --git a/cmake-modules/FindIrrXML.cmake b/cmake-modules/FindIrrXML.cmake
|
||||
new file mode 100644
|
||||
index 0000000..5434e0b
|
||||
--- /dev/null
|
||||
+++ b/cmake-modules/FindIrrXML.cmake
|
||||
@@ -0,0 +1,17 @@
|
||||
+# Find IrrXMl from irrlicht project
|
||||
+#
|
||||
+# Find LibIrrXML headers and library
|
||||
+#
|
||||
+# IRRXML_FOUND - IrrXML found
|
||||
+# IRRXML_INCLUDE_DIR - Headers location
|
||||
+# IRRXML_LIBRARY - IrrXML main library
|
||||
+
|
||||
+find_path(IRRXML_INCLUDE_DIR irrXML.h
|
||||
+ PATH_SUFFIXES include/irrlicht include/irrxml)
|
||||
+find_library(IRRXML_LIBRARY IrrXML)
|
||||
+
|
||||
+include(FindPackageHandleStandardArgs)
|
||||
+find_package_handle_standard_args(IrrXML REQUIRED_VARS IRRXML_INCLUDE_DIR IRRXML_LIBRARY)
|
||||
+
|
||||
+
|
||||
+mark_as_advanced(IRRXML_INCLUDE_DIR IRRXML_LIBRARY)
|
||||
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
|
||||
index 35ecf50..52073d1 100644
|
||||
--- a/code/CMakeLists.txt
|
||||
+++ b/code/CMakeLists.txt
|
||||
@@ -542,6 +542,9 @@ SET( PostProcessing_SRCS
|
||||
)
|
||||
SOURCE_GROUP( PostProcessing FILES ${PostProcessing_SRCS})
|
||||
|
||||
+SET( IrrXML_SRCS irrXMLWrapper.h )
|
||||
+SOURCE_GROUP( IrrXML FILES ${IrrXML_SRCS})
|
||||
+
|
||||
ADD_ASSIMP_IMPORTER( Q3D
|
||||
Q3DLoader.cpp
|
||||
Q3DLoader.h
|
||||
@@ -637,18 +640,6 @@ SET( Extra_SRCS
|
||||
)
|
||||
SOURCE_GROUP( Extra FILES ${Extra_SRCS})
|
||||
|
||||
-SET( IrrXML_SRCS
|
||||
- irrXMLWrapper.h
|
||||
- ../contrib/irrXML/CXMLReaderImpl.h
|
||||
- ../contrib/irrXML/heapsort.h
|
||||
- ../contrib/irrXML/irrArray.h
|
||||
- ../contrib/irrXML/irrString.h
|
||||
- ../contrib/irrXML/irrTypes.h
|
||||
- ../contrib/irrXML/irrXML.cpp
|
||||
- ../contrib/irrXML/irrXML.h
|
||||
-)
|
||||
-SOURCE_GROUP( IrrXML FILES ${IrrXML_SRCS})
|
||||
-
|
||||
SET( ConvertUTF_SRCS
|
||||
../contrib/ConvertUTF/ConvertUTF.h
|
||||
../contrib/ConvertUTF/ConvertUTF.c
|
||||
@@ -756,7 +747,8 @@ SET( assimp_src
|
||||
ADD_DEFINITIONS( -DOPENDDLPARSER_BUILD )
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
- ../contrib/openddlparser/include
|
||||
+ ${IRRXML_INCLUDE_DIR}
|
||||
+ ../contrib/openddlparser/include
|
||||
)
|
||||
|
||||
IF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
|
||||
@@ -766,7 +758,7 @@ ENDIF (ASSIMP_BUILD_NONFREE_C4D_IMPORTER)
|
||||
|
||||
ADD_LIBRARY( assimp ${assimp_src} )
|
||||
|
||||
-TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES} ${OPENDDL_PARSER_LIBRARIES} )
|
||||
+TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES} ${OPENDDL_PARSER_LIBRARIES} ${IRRXML_LIBRARY} )
|
||||
|
||||
if(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||
set(ASSIMP_ANDROID_JNIIOSYSTEM_PATH port/AndroidJNI)
|
||||
diff --git a/code/irrXMLWrapper.h b/code/irrXMLWrapper.h
|
||||
index 41e4188..9d96456 100644
|
||||
--- a/code/irrXMLWrapper.h
|
||||
+++ b/code/irrXMLWrapper.h
|
||||
@@ -42,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define INCLUDED_AI_IRRXML_WRAPPER
|
||||
|
||||
// some long includes ....
|
||||
-#include "./../contrib/irrXML/irrXML.h"
|
||||
+#include <irrXML.h>
|
||||
#include "./../include/assimp/IOStream.hpp"
|
||||
#include "BaseImporter.h"
|
||||
#include <vector>
|
||||
@@ -128,8 +128,8 @@ public:
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
//! Returns size of file in bytes
|
||||
- virtual int getSize() {
|
||||
- return (int)data.size();
|
||||
+ virtual long getSize() const {
|
||||
+ return (long)data.size();
|
||||
}
|
||||
|
||||
private:
|
||||
diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
|
||||
new file mode 100644
|
||||
index 0000000..362f165
|
||||
--- /dev/null
|
||||
+++ b/contrib/CMakeLists.txt
|
||||
@@ -0,0 +1,4 @@
|
||||
+# Compile internal irrXML only if system is not requested
|
||||
+if( NOT SYSTEM_IRRXML )
|
||||
+ add_subdirectory(irrXML)
|
||||
+endif( NOT SYSTEM_IRRXML )
|
||||
diff --git a/contrib/irrXML/CMakeLists.txt b/contrib/irrXML/CMakeLists.txt
|
||||
new file mode 100644
|
||||
index 0000000..82ede3a
|
||||
--- /dev/null
|
||||
+++ b/contrib/irrXML/CMakeLists.txt
|
||||
@@ -0,0 +1,13 @@
|
||||
+set( IrrXML_SRCS
|
||||
+ CXMLReaderImpl.h
|
||||
+ heapsort.h
|
||||
+ irrArray.h
|
||||
+ irrString.h
|
||||
+ irrTypes.h
|
||||
+ irrXML.cpp
|
||||
+ irrXML.h
|
||||
+)
|
||||
+
|
||||
+add_library(IrrXML STATIC ${IrrXML_SRCS})
|
||||
+set(IRRXML_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "IrrXML_Include" )
|
||||
+set(IRRXML_LIBRARY "IrrXML" CACHE INTERNAL "IrrXML" )
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
From 584a0923a3c78304974eb05930fbb908edbc8c8c Mon Sep 17 00:00:00 2001
|
||||
From: Helio Chissini de Castro <helio@kde.org>
|
||||
Date: Tue, 18 Apr 2017 19:21:30 +0200
|
||||
Subject: [PATCH] Assimp cmake provider fix
|
||||
|
||||
---
|
||||
assimp-config.cmake.in | 9 +++------
|
||||
1 file changed, 3 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/assimp-config.cmake.in b/assimp-config.cmake.in
|
||||
index e06cc10..9224b9b 100644
|
||||
--- a/assimp-config.cmake.in
|
||||
+++ b/assimp-config.cmake.in
|
||||
@@ -10,10 +10,7 @@
|
||||
# ASSIMP_LIBRARY_DIRS - link directories
|
||||
# ASSIMP_LIBRARIES - libraries to link plugins with
|
||||
# ASSIMP_Boost_VERSION - the boost version assimp was compiled with
|
||||
-get_filename_component(_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
-get_filename_component(_PREFIX "${_PREFIX}" PATH)
|
||||
-get_filename_component(_PREFIX "${_PREFIX}" PATH)
|
||||
-get_filename_component(ASSIMP_ROOT_DIR "${_PREFIX}" PATH)
|
||||
+set(ASSIMP_ROOT_DIR "@CMAKE_INSTALL_PREFIX@")
|
||||
|
||||
if( MSVC )
|
||||
# in order to prevent DLL hell, each of the DLLs have to be suffixed with the major version and msvc prefix
|
||||
@@ -45,8 +42,8 @@ if( WIN32 )
|
||||
set( ASSIMP_CXX_FLAGS " -DBOOST_ALL_DYN_LINK -DBOOST_ALL_NO_LIB")
|
||||
endif()
|
||||
set( ASSIMP_LINK_FLAGS "" )
|
||||
-set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@")
|
||||
-set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
|
||||
+set( ASSIMP_LIBRARY_DIRS "@ASSIMP_LIB_INSTALL_DIR@")
|
||||
+set( ASSIMP_INCLUDE_DIRS "@ASSIMP_INCLUDE_INSTALL_DIR@")
|
||||
set( ASSIMP_LIBRARIES assimp${ASSIMP_LIBRARY_SUFFIX})
|
||||
set( ASSIMP_LIBRARIES ${ASSIMP_LIBRARIES}@CMAKE_DEBUG_POSTFIX@)
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
|
@ -1,221 +0,0 @@
|
|||
From c63f886c9d12b88fc65afcd379bb086984dd44c2 Mon Sep 17 00:00:00 2001
|
||||
From: Helio Chissini de Castro <helio@kde.org>
|
||||
Date: Tue, 18 Apr 2017 14:51:17 +0200
|
||||
Subject: [PATCH] Enable doxygen been properly used from cmake build and
|
||||
install.
|
||||
|
||||
Current documentation lacks a proper directory handling and switch for
|
||||
Unix like systems.
|
||||
The option BUILD_DOCS are added as disable by default, even so the
|
||||
Doxyfile file is generated for a manual build.
|
||||
|
||||
Option HTML_OUTPUT are made cached to be properly replaced, as usually
|
||||
done by some Linux distributions
|
||||
|
||||
Microsoft CHM option is enabled if MSVC is detected.
|
||||
---
|
||||
CMakeLists.txt | 11 ++++++++++
|
||||
doc/CMakeLists.txt | 47 +++++++++++++++++++++++++++++++++++++++++++
|
||||
doc/{Doxyfile => Doxyfile.in} | 46 ++++++++++--------------------------------
|
||||
3 files changed, 69 insertions(+), 35 deletions(-)
|
||||
create mode 100644 doc/CMakeLists.txt
|
||||
rename doc/{Doxyfile => Doxyfile.in} (98%)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 8455bb8..6989510 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -40,6 +40,7 @@ cmake_minimum_required( VERSION 2.8 )
|
||||
PROJECT( Assimp )
|
||||
|
||||
OPTION(BUILD_SHARED_LIBS "Build package with shared libraries." ON)
|
||||
+
|
||||
IF(NOT BUILD_SHARED_LIBS)
|
||||
SET(LINK_SEARCH_START_STATIC TRUE)
|
||||
ENDIF(NOT BUILD_SHARED_LIBS)
|
||||
@@ -58,6 +59,12 @@ SET(ASSIMP_PACKAGE_VERSION "0" CACHE STRING "the package-specific version used f
|
||||
add_definitions( -DOPENDDL_NO_USE_CPP11 )
|
||||
set_property( GLOBAL PROPERTY CXX_STANDARD 11 )
|
||||
|
||||
+OPTION ( BUILD_DOCS
|
||||
+ "Build documentation using Doxygen."
|
||||
+ OFF
|
||||
+)
|
||||
+add_subdirectory(doc)
|
||||
+
|
||||
# Get the current working branch
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND git rev-parse --abbrev-ref HEAD
|
||||
@@ -105,6 +112,10 @@ IF( CMAKE_COMPILER_IS_MINGW )
|
||||
ADD_DEFINITIONS(-DASSIMP_BUILD_NO_IFC_IMPORTER )
|
||||
ENDIF()
|
||||
|
||||
+IF( UNIX )
|
||||
+ include(GNUInstallDirs)
|
||||
+ENDIF( UNIX )
|
||||
+
|
||||
IF((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT CMAKE_COMPILER_IS_MINGW)
|
||||
IF (BUILD_SHARED_LIBS AND CMAKE_SIZEOF_VOID_P EQUAL 8) # -fPIC is only required for shared libs on 64 bit
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
|
||||
new file mode 100644
|
||||
index 0000000..0ad04cf
|
||||
--- /dev/null
|
||||
+++ b/doc/CMakeLists.txt
|
||||
@@ -0,0 +1,51 @@
|
||||
+# Only test for Doxygent if BUILD_DOCS are ON
|
||||
+# We will configure Doxygen output anyway in case
|
||||
+# of manual generation
|
||||
+if( BUILD_DOCS )
|
||||
+ find_package( Doxygen REQUIRED )
|
||||
+endif( BUILD_DOCS )
|
||||
+
|
||||
+set( HTML_OUTPUT "AssimpDoc_Html" CACHE STRING "Output directory for generated HTML documentation. Defaults to AssimpDoc_Html." )
|
||||
+
|
||||
+# Enable Microsoft CHM help style only on Windows
|
||||
+set( MICROSOFT_HELP_WORKSHOP "NO")
|
||||
+if( MSVC )
|
||||
+ set( MICROSOFT_HELP_WORKSHOP "YES" )
|
||||
+endif( MSVC )
|
||||
+
|
||||
+configure_file(
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
|
||||
+ ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
||||
+ @ONLY
|
||||
+)
|
||||
+
|
||||
+add_custom_target(
|
||||
+ docs ALL
|
||||
+ DEPENDS docs.done
|
||||
+)
|
||||
+
|
||||
+add_custom_command(
|
||||
+ OUTPUT docs.done
|
||||
+ COMMAND ${DOXYGEN_EXECUTABLE}
|
||||
+ COMMAND ${CMAKE_COMMAND} -E touch docs.done
|
||||
+ COMMENT "Generating assimp documentation"
|
||||
+ VERBATIM
|
||||
+ )
|
||||
+
|
||||
+IF( UNIX )
|
||||
+ include(GNUInstallDirs)
|
||||
+ENDIF( UNIX )
|
||||
+
|
||||
+if( DEFINED CMAKE_INSTALL_DOCDIR )
|
||||
+ install(
|
||||
+ DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${HTML_OUTPUT}
|
||||
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}
|
||||
+ )
|
||||
+ install(FILES
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/AnimationOverview.png
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/AnimationOverview.svg
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/dragonsplash.png
|
||||
+ DESTINATION ${CMAKE_INSTALL_DOCDIR}/${HTML_OUTPUT}
|
||||
+ )
|
||||
+endif( DEFINED CMAKE_INSTALL_DOCDIR )
|
||||
+
|
||||
diff --git a/doc/Doxyfile b/doc/Doxyfile.in
|
||||
similarity index 98%
|
||||
rename from doc/Doxyfile
|
||||
rename to doc/Doxyfile.in
|
||||
index 64dd5d2..ebb6b72 100644
|
||||
--- a/doc/Doxyfile
|
||||
+++ b/doc/Doxyfile.in
|
||||
@@ -140,7 +140,8 @@ FULL_PATH_NAMES = NO
|
||||
# relative paths, which will be relative from the directory where doxygen is
|
||||
# started.
|
||||
|
||||
-STRIP_FROM_PATH =
|
||||
+STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@ \
|
||||
+ @PROJECT_BINARY_DIR@
|
||||
|
||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
|
||||
# the path mentioned in the documentation of a class, which tells
|
||||
@@ -339,22 +340,6 @@ INLINE_SIMPLE_STRUCTS = NO
|
||||
|
||||
TYPEDEF_HIDES_STRUCT = YES
|
||||
|
||||
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
|
||||
-# determine which symbols to keep in memory and which to flush to disk.
|
||||
-# When the cache is full, less often used symbols will be written to disk.
|
||||
-# For small to medium size projects (<1000 input files) the default value is
|
||||
-# probably good enough. For larger projects a too small cache size can cause
|
||||
-# doxygen to be busy swapping symbols to and from disk most of the time
|
||||
-# causing a significant performance penalty.
|
||||
-# If the system has enough physical memory increasing the cache will improve the
|
||||
-# performance by keeping more symbols in memory. Note that the value works on
|
||||
-# a logarithmic scale so increasing the size by one will roughly double the
|
||||
-# memory usage. The cache size is given by this formula:
|
||||
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
||||
-# corresponding to a cache size of 2^16 = 65536 symbols.
|
||||
-
|
||||
-SYMBOL_CACHE_SIZE = 0
|
||||
-
|
||||
# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
|
||||
# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
|
||||
# their name and scope. Since this can be an expensive process and often the
|
||||
@@ -677,9 +662,12 @@ WARN_LOGFILE =
|
||||
# directories like "/usr/src/myproject". Separate the files or directories
|
||||
# with spaces.
|
||||
|
||||
-INPUT = ../include/ \
|
||||
- ../doc/dox.h \
|
||||
- ../code/BaseImporter.h
|
||||
+INPUT = @doxy_main_page@ \
|
||||
+ @PROJECT_SOURCE_DIR@ \
|
||||
+ @PROJECT_BINARY_DIR@ \
|
||||
+ @PROJECT_SOURCE_DIR@/include/ \
|
||||
+ @PROJECT_SOURCE_DIR@/doc/dox.h \
|
||||
+ @PROJECT_SOURCE_DIR@/code/BaseImporter.h
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
|
||||
@@ -919,7 +907,7 @@ GENERATE_HTML = YES
|
||||
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
|
||||
# put in front of it. If left blank `html' will be used as the default path.
|
||||
|
||||
-HTML_OUTPUT = AssimpDoc_Html
|
||||
+HTML_OUTPUT = @HTML_OUTPUT@
|
||||
|
||||
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
|
||||
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
|
||||
@@ -953,7 +941,7 @@ HTML_FOOTER =
|
||||
# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
|
||||
# tag will in the future become obsolete.
|
||||
|
||||
-HTML_STYLESHEET = style.css
|
||||
+# HTML_STYLESHEET = @CMAKE_CURRENT_SOURCE_DIR@/style.css
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
|
||||
# user-defined cascading style sheet that is included after the standard
|
||||
@@ -1064,7 +1052,7 @@ DOCSET_PUBLISHER_NAME = Publisher
|
||||
# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
|
||||
# of the generated HTML documentation.
|
||||
|
||||
-GENERATE_HTMLHELP = YES
|
||||
+GENERATE_HTMLHELP = @MICROSOFT_HELP_WORKSHOP@
|
||||
|
||||
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
|
||||
# be used to specify the file name of the resulting .chm file. You
|
||||
@@ -1504,18 +1492,6 @@ GENERATE_XML = NO
|
||||
|
||||
XML_OUTPUT = xml
|
||||
|
||||
-# The XML_SCHEMA tag can be used to specify an XML schema,
|
||||
-# which can be used by a validating XML parser to check the
|
||||
-# syntax of the XML files.
|
||||
-
|
||||
-XML_SCHEMA =
|
||||
-
|
||||
-# The XML_DTD tag can be used to specify an XML DTD,
|
||||
-# which can be used by a validating XML parser to check the
|
||||
-# syntax of the XML files.
|
||||
-
|
||||
-XML_DTD =
|
||||
-
|
||||
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
|
||||
# dump the program listings (including syntax highlighting
|
||||
# and cross-referencing information) to the XML output. Note that
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
|
@ -1,966 +0,0 @@
|
|||
From 42e353f2a672baed485c03acf30529c77092ece9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Antti=20M=C3=A4=C3=A4tt=C3=A4?= <antti.maatta@qt.io>
|
||||
Date: Thu, 12 Jan 2017 13:41:32 +0200
|
||||
Subject: [PATCH] Morph animation support for collada
|
||||
|
||||
---
|
||||
code/CMakeLists.txt | 2 +
|
||||
code/ColladaHelper.h | 31 +++++
|
||||
code/ColladaLoader.cpp | 310 ++++++++++++++++++++++++++++++++++++++++++------
|
||||
code/ColladaLoader.h | 5 +
|
||||
code/ColladaParser.cpp | 48 +++++++-
|
||||
code/CreateAnimMesh.cpp | 92 ++++++++++++++
|
||||
code/CreateAnimMesh.h | 56 +++++++++
|
||||
include/assimp/anim.h | 95 +++++++++++++--
|
||||
include/assimp/mesh.h | 36 +++++-
|
||||
9 files changed, 623 insertions(+), 52 deletions(-)
|
||||
create mode 100644 code/CreateAnimMesh.cpp
|
||||
create mode 100644 code/CreateAnimMesh.h
|
||||
|
||||
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
|
||||
index 35ecf50..e0747d6 100644
|
||||
--- a/code/CMakeLists.txt
|
||||
+++ b/code/CMakeLists.txt
|
||||
@@ -171,6 +171,8 @@ SET( Common_SRCS
|
||||
Bitmap.h
|
||||
XMLTools.h
|
||||
Version.cpp
|
||||
+ CreateAnimMesh.h
|
||||
+ CreateAnimMesh.cpp
|
||||
)
|
||||
SOURCE_GROUP(Common FILES ${Common_SRCS})
|
||||
|
||||
diff --git a/code/ColladaHelper.h b/code/ColladaHelper.h
|
||||
index 5a51642..5ff4904 100644
|
||||
--- a/code/ColladaHelper.h
|
||||
+++ b/code/ColladaHelper.h
|
||||
@@ -89,6 +89,21 @@ enum InputType
|
||||
IT_Bitangent
|
||||
};
|
||||
|
||||
+/** Supported controller types */
|
||||
+enum ControllerType
|
||||
+{
|
||||
+ Skin,
|
||||
+ Morph
|
||||
+};
|
||||
+
|
||||
+/** Supported morph methods */
|
||||
+enum MorphMethod
|
||||
+{
|
||||
+ Normalized,
|
||||
+ Relative
|
||||
+};
|
||||
+
|
||||
+
|
||||
/** Contains all data for one of the different transformation types */
|
||||
struct Transform
|
||||
{
|
||||
@@ -380,6 +395,12 @@ enum PrimitiveType
|
||||
/** A skeleton controller to deform a mesh with the use of joints */
|
||||
struct Controller
|
||||
{
|
||||
+ // controller type
|
||||
+ ControllerType mType;
|
||||
+
|
||||
+ // Morphing method if type is Morph
|
||||
+ MorphMethod mMethod;
|
||||
+
|
||||
// the URL of the mesh deformed by the controller.
|
||||
std::string mMeshId;
|
||||
|
||||
@@ -402,6 +423,9 @@ struct Controller
|
||||
|
||||
// JointIndex-WeightIndex pairs for all vertices
|
||||
std::vector< std::pair<size_t, size_t> > mWeights;
|
||||
+
|
||||
+ std::string mMorphTarget;
|
||||
+ std::string mMorphWeight;
|
||||
};
|
||||
|
||||
/** A collada material. Pretty much the only member is a reference to an effect. */
|
||||
@@ -577,6 +601,12 @@ struct AnimationChannel
|
||||
std::string mSourceTimes;
|
||||
/** Source URL of the value values. Collada calls them "output". */
|
||||
std::string mSourceValues;
|
||||
+ /** Source URL of the IN_TANGENT semantic values. */
|
||||
+ std::string mInTanValues;
|
||||
+ /** Source URL of the OUT_TANGENT semantic values. */
|
||||
+ std::string mOutTanValues;
|
||||
+ /** Source URL of the INTERPOLATION semantic values. */
|
||||
+ std::string mInterpolationValues;
|
||||
};
|
||||
|
||||
/** An animation. Container for 0-x animation channels or 0-x animations */
|
||||
@@ -645,6 +675,7 @@ struct Animation
|
||||
struct ChannelEntry
|
||||
{
|
||||
const Collada::AnimationChannel* mChannel; ///> the source channel
|
||||
+ std::string mTargetId;
|
||||
std::string mTransformId; // the ID of the transformation step of the node which is influenced
|
||||
size_t mTransformIndex; // Index into the node's transform chain to apply the channel to
|
||||
size_t mSubElement; // starting index inside the transform data
|
||||
diff --git a/code/ColladaLoader.cpp b/code/ColladaLoader.cpp
|
||||
index 6cc0f85..a3b6d6e 100644
|
||||
--- a/code/ColladaLoader.cpp
|
||||
+++ b/code/ColladaLoader.cpp
|
||||
@@ -55,6 +55,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include "ParsingUtils.h"
|
||||
#include "SkeletonMeshBuilder.h"
|
||||
#include "Defines.h"
|
||||
+#include "CreateAnimMesh.h"
|
||||
|
||||
#include "time.h"
|
||||
#include "math.h"
|
||||
@@ -148,6 +149,7 @@ void ColladaLoader::InternReadFile( const std::string& pFile, aiScene* pScene, I
|
||||
mMeshIndexByID.clear();
|
||||
mMaterialIndexByName.clear();
|
||||
mMeshes.clear();
|
||||
+ mTargetMeshes.clear();
|
||||
newMats.clear();
|
||||
mLights.clear();
|
||||
mCameras.clear();
|
||||
@@ -562,6 +564,21 @@ void ColladaLoader::BuildMeshesForNode( const ColladaParser& pParser, const Coll
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
+// Find mesh from either meshes or morph target meshes
|
||||
+aiMesh *ColladaLoader::findMesh(std::string meshid)
|
||||
+{
|
||||
+ for (unsigned int i = 0; i < mMeshes.size(); i++)
|
||||
+ if (std::string(mMeshes[i]->mName.data) == meshid)
|
||||
+ return mMeshes[i];
|
||||
+
|
||||
+ for (unsigned int i = 0; i < mTargetMeshes.size(); i++)
|
||||
+ if (std::string(mTargetMeshes[i]->mName.data) == meshid)
|
||||
+ return mTargetMeshes[i];
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+// ------------------------------------------------------------------------------------------------
|
||||
// Creates a mesh for the given ColladaMesh face subset and returns the newly created mesh
|
||||
aiMesh* ColladaLoader::CreateMesh( const ColladaParser& pParser, const Collada::Mesh* pSrcMesh, const Collada::SubMesh& pSubMesh,
|
||||
const Collada::Controller* pSrcController, size_t pStartVertex, size_t pStartFace)
|
||||
@@ -646,8 +663,70 @@ aiMesh* ColladaLoader::CreateMesh( const ColladaParser& pParser, const Collada::
|
||||
face.mIndices[b] = vertex++;
|
||||
}
|
||||
|
||||
+ // create morph target meshes if any
|
||||
+ std::vector<aiMesh*> targetMeshes;
|
||||
+ std::vector<float> targetWeights;
|
||||
+ Collada::MorphMethod method;
|
||||
+
|
||||
+ for(std::map<std::string, Collada::Controller>::const_iterator it = pParser.mControllerLibrary.begin();
|
||||
+ it != pParser.mControllerLibrary.end(); it++)
|
||||
+ {
|
||||
+ const Collada::Controller &c = it->second;
|
||||
+ const Collada::Mesh* baseMesh = pParser.ResolveLibraryReference( pParser.mMeshLibrary, c.mMeshId);
|
||||
+
|
||||
+ if (c.mType == Collada::Morph && baseMesh->mName == pSrcMesh->mName)
|
||||
+ {
|
||||
+ const Collada::Accessor& targetAccessor = pParser.ResolveLibraryReference( pParser.mAccessorLibrary, c.mMorphTarget);
|
||||
+ const Collada::Accessor& weightAccessor = pParser.ResolveLibraryReference( pParser.mAccessorLibrary, c.mMorphWeight);
|
||||
+ const Collada::Data& targetData = pParser.ResolveLibraryReference( pParser.mDataLibrary, targetAccessor.mSource);
|
||||
+ const Collada::Data& weightData = pParser.ResolveLibraryReference( pParser.mDataLibrary, weightAccessor.mSource);
|
||||
+
|
||||
+ // take method
|
||||
+ method = c.mMethod;
|
||||
+
|
||||
+ if (!targetData.mIsStringArray)
|
||||
+ throw DeadlyImportError( "target data must contain id. ");
|
||||
+ if (weightData.mIsStringArray)
|
||||
+ throw DeadlyImportError( "target weight data must not be textual ");
|
||||
+
|
||||
+ for (unsigned int i = 0; i < targetData.mStrings.size(); ++i)
|
||||
+ {
|
||||
+ const Collada::Mesh* targetMesh = pParser.ResolveLibraryReference(pParser.mMeshLibrary, targetData.mStrings.at(i));
|
||||
+
|
||||
+ aiMesh *aimesh = findMesh(targetMesh->mName);
|
||||
+ if (!aimesh)
|
||||
+ {
|
||||
+ if (targetMesh->mSubMeshes.size() > 1)
|
||||
+ throw DeadlyImportError( "Morhing target mesh must be a single");
|
||||
+ aimesh = CreateMesh(pParser, targetMesh, targetMesh->mSubMeshes.at(0), NULL, 0, 0);
|
||||
+ mTargetMeshes.push_back(aimesh);
|
||||
+ }
|
||||
+ targetMeshes.push_back(aimesh);
|
||||
+ }
|
||||
+ for (unsigned int i = 0; i < weightData.mValues.size(); ++i)
|
||||
+ targetWeights.push_back(weightData.mValues.at(i));
|
||||
+ }
|
||||
+ }
|
||||
+ if (targetMeshes.size() > 0 && targetWeights.size() == targetMeshes.size())
|
||||
+ {
|
||||
+ std::vector<aiAnimMesh*> animMeshes;
|
||||
+ for (unsigned int i = 0; i < targetMeshes.size(); i++)
|
||||
+ {
|
||||
+ aiAnimMesh *animMesh = aiCreateAnimMesh(targetMeshes.at(i));
|
||||
+ animMesh->mWeight = targetWeights[i];
|
||||
+ animMeshes.push_back(animMesh);
|
||||
+ }
|
||||
+ dstMesh->mMethod = (method == Collada::Relative)
|
||||
+ ? aiMorphingMethod_MORPH_RELATIVE
|
||||
+ : aiMorphingMethod_MORPH_NORMALIZED;
|
||||
+ dstMesh->mAnimMeshes = new aiAnimMesh*[animMeshes.size()];
|
||||
+ dstMesh->mNumAnimMeshes = animMeshes.size();
|
||||
+ for (unsigned int i = 0; i < animMeshes.size(); i++)
|
||||
+ dstMesh->mAnimMeshes[i] = animMeshes.at(i);
|
||||
+ }
|
||||
+
|
||||
// create bones if given
|
||||
- if( pSrcController)
|
||||
+ if( pSrcController && pSrcController->mType == Collada::Skin)
|
||||
{
|
||||
// refuse if the vertex count does not match
|
||||
// if( pSrcController->mWeightCounts.size() != dstMesh->mNumVertices)
|
||||
@@ -946,6 +1025,68 @@ void ColladaLoader::StoreAnimations( aiScene* pScene, const ColladaParser& pPars
|
||||
CreateAnimation( pScene, pParser, pSrcAnim, animName);
|
||||
}
|
||||
|
||||
+struct MorphTimeValues
|
||||
+{
|
||||
+ float mTime;
|
||||
+ struct key
|
||||
+ {
|
||||
+ float mWeight;
|
||||
+ unsigned int mValue;
|
||||
+ };
|
||||
+ std::vector<key> mKeys;
|
||||
+};
|
||||
+
|
||||
+void insertMorphTimeValue(std::vector<MorphTimeValues> &values, float time, float weight, unsigned int value)
|
||||
+{
|
||||
+ MorphTimeValues::key k;
|
||||
+ k.mValue = value;
|
||||
+ k.mWeight = weight;
|
||||
+ if (values.size() == 0 || time < values[0].mTime)
|
||||
+ {
|
||||
+ MorphTimeValues val;
|
||||
+ val.mTime = time;
|
||||
+ val.mKeys.push_back(k);
|
||||
+ values.insert(values.begin(), val);
|
||||
+ return;
|
||||
+ }
|
||||
+ if (time > values.back().mTime)
|
||||
+ {
|
||||
+ MorphTimeValues val;
|
||||
+ val.mTime = time;
|
||||
+ val.mKeys.push_back(k);
|
||||
+ values.insert(values.end(), val);
|
||||
+ return;
|
||||
+ }
|
||||
+ for (unsigned int i = 0; i < values.size(); i++)
|
||||
+ {
|
||||
+ if (std::abs(time - values[i].mTime) < 1e-6f)
|
||||
+ {
|
||||
+ values[i].mKeys.push_back(k);
|
||||
+ return;
|
||||
+ } else if (time > values[i].mTime && time < values[i+1].mTime)
|
||||
+ {
|
||||
+ MorphTimeValues val;
|
||||
+ val.mTime = time;
|
||||
+ val.mKeys.push_back(k);
|
||||
+ values.insert(values.begin() + i, val);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+ // should not get here
|
||||
+}
|
||||
+
|
||||
+float getWeightAtKey(const std::vector<MorphTimeValues> &values, int key, unsigned int value)
|
||||
+{
|
||||
+ for (unsigned int i = 0; i < values[key].mKeys.size(); i++)
|
||||
+ {
|
||||
+ if (values[key].mKeys[i].mValue == value)
|
||||
+ return values[key].mKeys[i].mWeight;
|
||||
+ }
|
||||
+ // no value at key found, try to interpolate if present at other keys. if not, return zero
|
||||
+ // TODO: interpolation
|
||||
+ return 0.0f;
|
||||
+}
|
||||
+
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Constructs the animation for the given source anim
|
||||
void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pParser, const Collada::Animation* pSrcAnim, const std::string& pName)
|
||||
@@ -955,6 +1096,8 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
|
||||
CollectNodes( pScene->mRootNode, nodes);
|
||||
|
||||
std::vector<aiNodeAnim*> anims;
|
||||
+ std::vector<aiMeshMorphAnim*> morphAnims;
|
||||
+
|
||||
for( std::vector<const aiNode*>::const_iterator nit = nodes.begin(); nit != nodes.end(); ++nit)
|
||||
{
|
||||
// find all the collada anim channels which refer to the current node
|
||||
@@ -978,7 +1121,20 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
|
||||
// find the slash that separates the node name - there should be only one
|
||||
std::string::size_type slashPos = srcChannel.mTarget.find( '/');
|
||||
if( slashPos == std::string::npos)
|
||||
+ {
|
||||
+ std::string::size_type targetPos = srcChannel.mTarget.find(srcNode->mID);
|
||||
+ if (targetPos == std::string::npos)
|
||||
+ continue;
|
||||
+
|
||||
+ // not node transform, but something else. store as unknown animation channel for now
|
||||
+ entry.mChannel = &(*cit);
|
||||
+ entry.mTargetId = srcChannel.mTarget.substr(targetPos + pSrcAnim->mName.length(),
|
||||
+ srcChannel.mTarget.length() - targetPos - pSrcAnim->mName.length());
|
||||
+ if (entry.mTargetId.front() == '-')
|
||||
+ entry.mTargetId = entry.mTargetId.substr(1);
|
||||
+ entries.push_back(entry);
|
||||
continue;
|
||||
+ }
|
||||
if( srcChannel.mTarget.find( '/', slashPos+1) != std::string::npos)
|
||||
continue;
|
||||
std::string targetID = srcChannel.mTarget.substr( 0, slashPos);
|
||||
@@ -1058,8 +1214,14 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
|
||||
if( srcNode->mTransforms[a].mID == entry.mTransformId)
|
||||
entry.mTransformIndex = a;
|
||||
|
||||
- if( entry.mTransformIndex == SIZE_MAX) {
|
||||
- continue;
|
||||
+ if( entry.mTransformIndex == SIZE_MAX)
|
||||
+ {
|
||||
+ if (entry.mTransformId.find("morph-weights") != std::string::npos)
|
||||
+ {
|
||||
+ entry.mTargetId = entry.mTransformId;
|
||||
+ entry.mTransformId = "";
|
||||
+ } else
|
||||
+ continue;
|
||||
}
|
||||
|
||||
entry.mChannel = &(*cit);
|
||||
@@ -1203,49 +1365,125 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
|
||||
// ai_assert( resultTrafos.size() > 0);
|
||||
|
||||
// build an animation channel for the given node out of these trafo keys
|
||||
- if( !resultTrafos.empty() )
|
||||
- {
|
||||
- aiNodeAnim* dstAnim = new aiNodeAnim;
|
||||
- dstAnim->mNodeName = nodeName;
|
||||
- dstAnim->mNumPositionKeys = resultTrafos.size();
|
||||
- dstAnim->mNumRotationKeys= resultTrafos.size();
|
||||
- dstAnim->mNumScalingKeys = resultTrafos.size();
|
||||
- dstAnim->mPositionKeys = new aiVectorKey[resultTrafos.size()];
|
||||
- dstAnim->mRotationKeys = new aiQuatKey[resultTrafos.size()];
|
||||
- dstAnim->mScalingKeys = new aiVectorKey[resultTrafos.size()];
|
||||
-
|
||||
- for( size_t a = 0; a < resultTrafos.size(); ++a)
|
||||
- {
|
||||
- aiMatrix4x4 mat = resultTrafos[a];
|
||||
- double time = double( mat.d4); // remember? time is stored in mat.d4
|
||||
- mat.d4 = 1.0f;
|
||||
-
|
||||
- dstAnim->mPositionKeys[a].mTime = time;
|
||||
- dstAnim->mRotationKeys[a].mTime = time;
|
||||
- dstAnim->mScalingKeys[a].mTime = time;
|
||||
- mat.Decompose( dstAnim->mScalingKeys[a].mValue, dstAnim->mRotationKeys[a].mValue, dstAnim->mPositionKeys[a].mValue);
|
||||
- }
|
||||
+ if( !resultTrafos.empty() )
|
||||
+ {
|
||||
+ aiNodeAnim* dstAnim = new aiNodeAnim;
|
||||
+ dstAnim->mNodeName = nodeName;
|
||||
+ dstAnim->mNumPositionKeys = resultTrafos.size();
|
||||
+ dstAnim->mNumRotationKeys= resultTrafos.size();
|
||||
+ dstAnim->mNumScalingKeys = resultTrafos.size();
|
||||
+ dstAnim->mPositionKeys = new aiVectorKey[resultTrafos.size()];
|
||||
+ dstAnim->mRotationKeys = new aiQuatKey[resultTrafos.size()];
|
||||
+ dstAnim->mScalingKeys = new aiVectorKey[resultTrafos.size()];
|
||||
+
|
||||
+ for( size_t a = 0; a < resultTrafos.size(); ++a)
|
||||
+ {
|
||||
+ aiMatrix4x4 mat = resultTrafos[a];
|
||||
+ double time = double( mat.d4); // remember? time is stored in mat.d4
|
||||
+ mat.d4 = 1.0f;
|
||||
+
|
||||
+ dstAnim->mPositionKeys[a].mTime = time;
|
||||
+ dstAnim->mRotationKeys[a].mTime = time;
|
||||
+ dstAnim->mScalingKeys[a].mTime = time;
|
||||
+ mat.Decompose( dstAnim->mScalingKeys[a].mValue, dstAnim->mRotationKeys[a].mValue, dstAnim->mPositionKeys[a].mValue);
|
||||
+ }
|
||||
|
||||
- anims.push_back( dstAnim);
|
||||
- } else
|
||||
- {
|
||||
- DefaultLogger::get()->warn( "Collada loader: found empty animation channel, ignored. Please check your exporter.");
|
||||
- }
|
||||
+ anims.push_back( dstAnim);
|
||||
+ } else
|
||||
+ {
|
||||
+ DefaultLogger::get()->warn( "Collada loader: found empty animation channel, ignored. Please check your exporter.");
|
||||
+ }
|
||||
+
|
||||
+ if( !entries.empty() && entries.front().mTimeAccessor->mCount > 0 )
|
||||
+ {
|
||||
+ std::vector<Collada::ChannelEntry> morphChannels;
|
||||
+ for( std::vector<Collada::ChannelEntry>::iterator it = entries.begin(); it != entries.end(); ++it)
|
||||
+ {
|
||||
+ Collada::ChannelEntry& e = *it;
|
||||
+
|
||||
+ // skip non-transform types
|
||||
+ if (e.mTargetId.empty())
|
||||
+ continue;
|
||||
+
|
||||
+ if (e.mTargetId.find("morph-weights") != std::string::npos)
|
||||
+ morphChannels.push_back(e);
|
||||
+ }
|
||||
+ if (morphChannels.size() > 0)
|
||||
+ {
|
||||
+ // either 1) morph weight animation count should contain morph target count channels
|
||||
+ // or 2) one channel with morph target count arrays
|
||||
+ // assume first
|
||||
+
|
||||
+ aiMeshMorphAnim *morphAnim = new aiMeshMorphAnim;
|
||||
+ morphAnim->mName.Set(nodeName);
|
||||
+
|
||||
+ std::vector<MorphTimeValues> morphTimeValues;
|
||||
+
|
||||
+ int morphAnimChannelIndex = 0;
|
||||
+ for( std::vector<Collada::ChannelEntry>::iterator it = morphChannels.begin(); it != morphChannels.end(); ++it)
|
||||
+ {
|
||||
+ Collada::ChannelEntry& e = *it;
|
||||
+ std::string::size_type apos = e.mTargetId.find('(');
|
||||
+ std::string::size_type bpos = e.mTargetId.find(')');
|
||||
+ if (apos == std::string::npos || bpos == std::string::npos)
|
||||
+ // unknown way to specify weight -> ignore this animation
|
||||
+ continue;
|
||||
+
|
||||
+ // weight target can be in format Weight_M_N, Weight_N, WeightN, or some other way
|
||||
+ // we ignore the name and just assume the channels are in the right order
|
||||
+ for (unsigned int i = 0; i < e.mTimeData->mValues.size(); i++)
|
||||
+ insertMorphTimeValue(morphTimeValues, e.mTimeData->mValues.at(i), e.mValueData->mValues.at(i), morphAnimChannelIndex);
|
||||
+
|
||||
+ ++morphAnimChannelIndex;
|
||||
+ }
|
||||
+
|
||||
+ morphAnim->mNumKeys = morphTimeValues.size();
|
||||
+ morphAnim->mKeys = new aiMeshMorphKey[morphAnim->mNumKeys];
|
||||
+ for (unsigned int key = 0; key < morphAnim->mNumKeys; key++)
|
||||
+ {
|
||||
+ morphAnim->mKeys[key].mNumValuesAndWeights = morphChannels.size();
|
||||
+ morphAnim->mKeys[key].mValues = new unsigned int [morphChannels.size()];
|
||||
+ morphAnim->mKeys[key].mWeights = new double [morphChannels.size()];
|
||||
+
|
||||
+ morphAnim->mKeys[key].mTime = morphTimeValues[key].mTime;
|
||||
+ for (unsigned int valueIndex = 0; valueIndex < morphChannels.size(); valueIndex++)
|
||||
+ {
|
||||
+ morphAnim->mKeys[key].mValues[valueIndex] = valueIndex;
|
||||
+ morphAnim->mKeys[key].mWeights[valueIndex] = getWeightAtKey(morphTimeValues, key, valueIndex);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ morphAnims.push_back(morphAnim);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
- if( !anims.empty())
|
||||
+ if( !anims.empty() || !morphAnims.empty())
|
||||
{
|
||||
aiAnimation* anim = new aiAnimation;
|
||||
anim->mName.Set( pName);
|
||||
anim->mNumChannels = anims.size();
|
||||
- anim->mChannels = new aiNodeAnim*[anims.size()];
|
||||
- std::copy( anims.begin(), anims.end(), anim->mChannels);
|
||||
+ if (anim->mNumChannels > 0)
|
||||
+ {
|
||||
+ anim->mChannels = new aiNodeAnim*[anims.size()];
|
||||
+ std::copy( anims.begin(), anims.end(), anim->mChannels);
|
||||
+ }
|
||||
+ anim->mNumMorphMeshChannels = morphAnims.size();
|
||||
+ if (anim->mNumMorphMeshChannels > 0)
|
||||
+ {
|
||||
+ anim->mMorphMeshChannels = new aiMeshMorphAnim*[anim->mNumMorphMeshChannels];
|
||||
+ std::copy( morphAnims.begin(), morphAnims.end(), anim->mMorphMeshChannels);
|
||||
+ }
|
||||
anim->mDuration = 0.0f;
|
||||
for( size_t a = 0; a < anims.size(); ++a)
|
||||
{
|
||||
- anim->mDuration = std::max( anim->mDuration, anims[a]->mPositionKeys[anims[a]->mNumPositionKeys-1].mTime);
|
||||
- anim->mDuration = std::max( anim->mDuration, anims[a]->mRotationKeys[anims[a]->mNumRotationKeys-1].mTime);
|
||||
- anim->mDuration = std::max( anim->mDuration, anims[a]->mScalingKeys[anims[a]->mNumScalingKeys-1].mTime);
|
||||
+ anim->mDuration = std::max( anim->mDuration, anims[a]->mPositionKeys[anims[a]->mNumPositionKeys-1].mTime);
|
||||
+ anim->mDuration = std::max( anim->mDuration, anims[a]->mRotationKeys[anims[a]->mNumRotationKeys-1].mTime);
|
||||
+ anim->mDuration = std::max( anim->mDuration, anims[a]->mScalingKeys[anims[a]->mNumScalingKeys-1].mTime);
|
||||
+ }
|
||||
+ for (size_t a = 0; a < morphAnims.size(); ++a)
|
||||
+ {
|
||||
+ anim->mDuration = std::max(anim->mDuration, morphAnims[a]->mKeys[morphAnims[a]->mNumKeys-1].mTime);
|
||||
}
|
||||
anim->mTicksPerSecond = 1;
|
||||
mAnims.push_back( anim);
|
||||
diff --git a/code/ColladaLoader.h b/code/ColladaLoader.h
|
||||
index 313608c..fc26532 100644
|
||||
--- a/code/ColladaLoader.h
|
||||
+++ b/code/ColladaLoader.h
|
||||
@@ -117,6 +117,8 @@ protected:
|
||||
/** Builds meshes for the given node and references them */
|
||||
void BuildMeshesForNode( const ColladaParser& pParser, const Collada::Node* pNode,
|
||||
aiNode* pTarget);
|
||||
+
|
||||
+ aiMesh *findMesh(std::string meshid);
|
||||
|
||||
/** Creates a mesh for the given ColladaMesh face subset and returns the newly created mesh */
|
||||
aiMesh* CreateMesh( const ColladaParser& pParser, const Collada::Mesh* pSrcMesh, const Collada::SubMesh& pSubMesh,
|
||||
@@ -223,6 +225,9 @@ protected:
|
||||
|
||||
/** Accumulated meshes for the target scene */
|
||||
std::vector<aiMesh*> mMeshes;
|
||||
+
|
||||
+ /** Accumulated morph target meshes */
|
||||
+ std::vector<aiMesh*> mTargetMeshes;
|
||||
|
||||
/** Temporary material list */
|
||||
std::vector<std::pair<Collada::Effect*, aiMaterial*> > newMats;
|
||||
diff --git a/code/ColladaParser.cpp b/code/ColladaParser.cpp
|
||||
index 527e2ed..ce87476 100644
|
||||
--- a/code/ColladaParser.cpp
|
||||
+++ b/code/ColladaParser.cpp
|
||||
@@ -586,6 +586,12 @@ void ColladaParser::ReadAnimationSampler( Collada::AnimationChannel& pChannel)
|
||||
pChannel.mSourceTimes = source;
|
||||
else if( strcmp( semantic, "OUTPUT") == 0)
|
||||
pChannel.mSourceValues = source;
|
||||
+ else if( strcmp( semantic, "IN_TANGENT") == 0)
|
||||
+ pChannel.mInTanValues = source;
|
||||
+ else if( strcmp( semantic, "OUT_TANGENT") == 0)
|
||||
+ pChannel.mOutTanValues = source;
|
||||
+ else if( strcmp( semantic, "INTERPOLATION") == 0)
|
||||
+ pChannel.mInterpolationValues = source;
|
||||
|
||||
if( !mReader->isEmptyElement())
|
||||
SkipElement();
|
||||
@@ -648,6 +654,9 @@ void ColladaParser::ReadControllerLibrary()
|
||||
// Reads a controller into the given mesh structure
|
||||
void ColladaParser::ReadController( Collada::Controller& pController)
|
||||
{
|
||||
+ // initial values
|
||||
+ pController.mType = Skin;
|
||||
+ pController.mMethod = Normalized;
|
||||
while( mReader->read())
|
||||
{
|
||||
if( mReader->getNodeType() == irr::io::EXN_ELEMENT)
|
||||
@@ -655,8 +664,15 @@ void ColladaParser::ReadController( Collada::Controller& pController)
|
||||
// two types of controllers: "skin" and "morph". Only the first one is relevant, we skip the other
|
||||
if( IsElement( "morph"))
|
||||
{
|
||||
- // should skip everything inside, so there's no danger of catching elements inbetween
|
||||
- SkipElement();
|
||||
+ pController.mType = Morph;
|
||||
+ int baseIndex = GetAttribute("source");
|
||||
+ pController.mMeshId = mReader->getAttributeValue(baseIndex) + 1;
|
||||
+ int methodIndex = GetAttribute("method");
|
||||
+ if (methodIndex > 0) {
|
||||
+ const char *method = mReader->getAttributeValue(methodIndex);
|
||||
+ if (strcmp(method, "RELATIVE") == 0)
|
||||
+ pController.mMethod = Relative;
|
||||
+ }
|
||||
}
|
||||
else if( IsElement( "skin"))
|
||||
{
|
||||
@@ -694,6 +710,32 @@ void ColladaParser::ReadController( Collada::Controller& pController)
|
||||
{
|
||||
ReadControllerWeights( pController);
|
||||
}
|
||||
+ else if ( IsElement( "targets" ))
|
||||
+ {
|
||||
+ while (mReader->read()) {
|
||||
+ if( mReader->getNodeType() == irr::io::EXN_ELEMENT) {
|
||||
+ if ( IsElement( "input")) {
|
||||
+ int semanticsIndex = GetAttribute("semantic");
|
||||
+ int sourceIndex = GetAttribute("source");
|
||||
+
|
||||
+ const char *semantics = mReader->getAttributeValue(semanticsIndex);
|
||||
+ const char *source = mReader->getAttributeValue(sourceIndex);
|
||||
+ if (strcmp(semantics, "MORPH_TARGET") == 0) {
|
||||
+ pController.mMorphTarget = source + 1;
|
||||
+ }
|
||||
+ else if (strcmp(semantics, "MORPH_WEIGHT") == 0)
|
||||
+ {
|
||||
+ pController.mMorphWeight = source + 1;
|
||||
+ }
|
||||
+ }
|
||||
+ } else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END) {
|
||||
+ if( strcmp( mReader->getNodeName(), "targets") == 0)
|
||||
+ break;
|
||||
+ else
|
||||
+ ThrowException( "Expected end of <targets> element.");
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
else
|
||||
{
|
||||
// ignore the rest
|
||||
@@ -704,7 +746,7 @@ void ColladaParser::ReadController( Collada::Controller& pController)
|
||||
{
|
||||
if( strcmp( mReader->getNodeName(), "controller") == 0)
|
||||
break;
|
||||
- else if( strcmp( mReader->getNodeName(), "skin") != 0)
|
||||
+ else if( strcmp( mReader->getNodeName(), "skin") != 0 && strcmp( mReader->getNodeName(), "morph") != 0)
|
||||
ThrowException( "Expected end of <controller> element.");
|
||||
}
|
||||
}
|
||||
diff --git a/code/CreateAnimMesh.cpp b/code/CreateAnimMesh.cpp
|
||||
new file mode 100644
|
||||
index 0000000..094a414
|
||||
--- /dev/null
|
||||
+++ b/code/CreateAnimMesh.cpp
|
||||
@@ -0,0 +1,92 @@
|
||||
+/*
|
||||
+---------------------------------------------------------------------------
|
||||
+Open Asset Import Library (assimp)
|
||||
+---------------------------------------------------------------------------
|
||||
+
|
||||
+Copyright (C) 2016 The Qt Company Ltd.
|
||||
+Copyright (c) 2006-2012, 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.
|
||||
+---------------------------------------------------------------------------
|
||||
+*/
|
||||
+
|
||||
+#include "CreateAnimMesh.h"
|
||||
+
|
||||
+namespace Assimp {
|
||||
+
|
||||
+aiAnimMesh *aiCreateAnimMesh(const aiMesh *mesh)
|
||||
+{
|
||||
+ aiAnimMesh *animesh = new aiAnimMesh;
|
||||
+ animesh->mVertices = NULL;
|
||||
+ animesh->mNormals = NULL;
|
||||
+ animesh->mTangents = NULL;
|
||||
+ animesh->mBitangents = NULL;
|
||||
+ animesh->mNumVertices = mesh->mNumVertices;
|
||||
+ if (mesh->mVertices) {
|
||||
+ animesh->mVertices = new aiVector3D[animesh->mNumVertices];
|
||||
+ std::memcpy(animesh->mVertices, mesh->mVertices, mesh->mNumVertices * sizeof(aiVector3D));
|
||||
+ }
|
||||
+ if (mesh->mNormals) {
|
||||
+ animesh->mNormals = new aiVector3D[animesh->mNumVertices];
|
||||
+ std::memcpy(animesh->mNormals, mesh->mNormals, mesh->mNumVertices * sizeof(aiVector3D));
|
||||
+ }
|
||||
+ if (mesh->mTangents) {
|
||||
+ animesh->mTangents = new aiVector3D[animesh->mNumVertices];
|
||||
+ std::memcpy(animesh->mTangents, mesh->mTangents, mesh->mNumVertices * sizeof(aiVector3D));
|
||||
+ }
|
||||
+ if (mesh->mBitangents) {
|
||||
+ animesh->mBitangents = new aiVector3D[animesh->mNumVertices];
|
||||
+ std::memcpy(animesh->mBitangents, mesh->mBitangents, mesh->mNumVertices * sizeof(aiVector3D));
|
||||
+ }
|
||||
+
|
||||
+ for (int i = 0; i < AI_MAX_NUMBER_OF_COLOR_SETS; ++i) {
|
||||
+ if (mesh->mColors[i]) {
|
||||
+ animesh->mColors[i] = new aiColor4D[animesh->mNumVertices];
|
||||
+ std::memcpy(animesh->mColors[i], mesh->mColors[i], mesh->mNumVertices * sizeof(aiColor4D));
|
||||
+ } else {
|
||||
+ animesh->mColors[i] = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ for (int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
|
||||
+ if (mesh->mTextureCoords[i]) {
|
||||
+ animesh->mTextureCoords[i] = new aiVector3D[animesh->mNumVertices];
|
||||
+ std::memcpy(animesh->mTextureCoords[i], mesh->mTextureCoords[i], mesh->mNumVertices * sizeof(aiVector3D));
|
||||
+ } else {
|
||||
+ animesh->mTextureCoords[i] = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ return animesh;
|
||||
+}
|
||||
+
|
||||
+} // end of namespace Assimp
|
||||
diff --git a/code/CreateAnimMesh.h b/code/CreateAnimMesh.h
|
||||
new file mode 100644
|
||||
index 0000000..c5ceb40
|
||||
--- /dev/null
|
||||
+++ b/code/CreateAnimMesh.h
|
||||
@@ -0,0 +1,56 @@
|
||||
+/*
|
||||
+Open Asset Import Library (assimp)
|
||||
+----------------------------------------------------------------------
|
||||
+
|
||||
+Copyright (c) 2006-2016, 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 CreateAnimMesh.h
|
||||
+ * Create AnimMesh from Mesh
|
||||
+ */
|
||||
+#ifndef INCLUDED_AI_CREATE_ANIM_MESH_H
|
||||
+#define INCLUDED_AI_CREATE_ANIM_MESH_H
|
||||
+
|
||||
+#include <assimp/mesh.h>
|
||||
+
|
||||
+namespace Assimp {
|
||||
+
|
||||
+/** Create aiAnimMesh from aiMesh. */
|
||||
+aiAnimMesh *aiCreateAnimMesh(const aiMesh *mesh);
|
||||
+
|
||||
+} // end of namespace Assimp
|
||||
+#endif // INCLUDED_AI_CREATE_ANIM_MESH_H
|
||||
+
|
||||
diff --git a/include/assimp/anim.h b/include/assimp/anim.h
|
||||
index af59417..7b4dff8 100644
|
||||
--- a/include/assimp/anim.h
|
||||
+++ b/include/assimp/anim.h
|
||||
@@ -182,6 +182,39 @@ struct aiMeshKey
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
+/** Binds a morph anim mesh to a specific point in time. */
|
||||
+struct aiMeshMorphKey
|
||||
+{
|
||||
+ /** The time of this key */
|
||||
+ double mTime;
|
||||
+
|
||||
+ /** The values and weights at the time of this key */
|
||||
+ unsigned int *mValues;
|
||||
+ double *mWeights;
|
||||
+
|
||||
+ /** The number of values and weights */
|
||||
+ unsigned int mNumValuesAndWeights;
|
||||
+#ifdef __cplusplus
|
||||
+ aiMeshMorphKey()
|
||||
+ : mTime(0.0)
|
||||
+ , mValues(NULL)
|
||||
+ , mWeights(NULL)
|
||||
+ , mNumValuesAndWeights(0)
|
||||
+ {
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ ~aiMeshMorphKey()
|
||||
+ {
|
||||
+ if (mNumValuesAndWeights && mValues && mWeights) {
|
||||
+ delete [] mValues;
|
||||
+ delete [] mWeights;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
+// ---------------------------------------------------------------------------
|
||||
/** Defines how an animation channel behaves outside the defined time
|
||||
* range. This corresponds to aiNodeAnim::mPreState and
|
||||
* aiNodeAnim::mPostState.*/
|
||||
@@ -335,7 +368,38 @@ struct aiMeshAnim
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
-/** An animation consists of keyframe data for a number of nodes. For
|
||||
+/** Describes a morphing animation of a given mesh. */
|
||||
+struct aiMeshMorphAnim
|
||||
+{
|
||||
+ /** Name of the mesh to be animated. An empty string is not allowed,
|
||||
+ * animated meshes need to be named (not necessarily uniquely,
|
||||
+ * the name can basically serve as wildcard to select a group
|
||||
+ * of meshes with similar animation setup)*/
|
||||
+ C_STRUCT aiString mName;
|
||||
+
|
||||
+ /** Size of the #mKeys array. Must be 1, at least. */
|
||||
+ unsigned int mNumKeys;
|
||||
+
|
||||
+ /** Key frames of the animation. May not be NULL. */
|
||||
+ C_STRUCT aiMeshMorphKey* mKeys;
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+
|
||||
+ aiMeshMorphAnim()
|
||||
+ : mNumKeys()
|
||||
+ , mKeys()
|
||||
+ {}
|
||||
+
|
||||
+ ~aiMeshMorphAnim()
|
||||
+ {
|
||||
+ delete[] mKeys;
|
||||
+ }
|
||||
+
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
+// ---------------------------------------------------------------------------
|
||||
+/** An animation consists of key-frame data for a number of nodes. For
|
||||
* each node affected by the animation a separate series of data is given.*/
|
||||
struct aiAnimation
|
||||
{
|
||||
@@ -367,15 +431,25 @@ struct aiAnimation
|
||||
* The array is mNumMeshChannels in size. */
|
||||
C_STRUCT aiMeshAnim** mMeshChannels;
|
||||
|
||||
+ /** The number of mesh animation channels. Each channel affects
|
||||
+ * a single mesh and defines morphing animation. */
|
||||
+ unsigned int mNumMorphMeshChannels;
|
||||
+
|
||||
+ /** The morph mesh animation channels. Each channel affects a single mesh.
|
||||
+ * The array is mNumMorphMeshChannels in size. */
|
||||
+ C_STRUCT aiMeshMorphAnim **mMorphMeshChannels;
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
aiAnimation()
|
||||
- : mDuration(-1.)
|
||||
- , mTicksPerSecond()
|
||||
- , mNumChannels()
|
||||
- , mChannels()
|
||||
- , mNumMeshChannels()
|
||||
- , mMeshChannels()
|
||||
- {
|
||||
+ : mDuration(-1.)
|
||||
+ , mTicksPerSecond(0.)
|
||||
+ , mNumChannels(0)
|
||||
+ , mChannels(NULL)
|
||||
+ , mNumMeshChannels(0)
|
||||
+ , mMeshChannels(NULL)
|
||||
+ , mNumMorphMeshChannels(0)
|
||||
+ , mMorphMeshChannels(NULL) {
|
||||
+ // empty
|
||||
}
|
||||
|
||||
~aiAnimation()
|
||||
@@ -395,6 +469,11 @@ struct aiAnimation
|
||||
|
||||
delete [] mMeshChannels;
|
||||
}
|
||||
+ if (mNumMorphMeshChannels && mMorphMeshChannels) {
|
||||
+ for( unsigned int a = 0; a < mNumMorphMeshChannels; a++) {
|
||||
+ delete mMorphMeshChannels[a];
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
#endif // __cplusplus
|
||||
};
|
||||
diff --git a/include/assimp/mesh.h b/include/assimp/mesh.h
|
||||
index a76a2d7..2ebc14d 100644
|
||||
--- a/include/assimp/mesh.h
|
||||
+++ b/include/assimp/mesh.h
|
||||
@@ -377,6 +377,9 @@ struct aiAnimMesh
|
||||
*/
|
||||
unsigned int mNumVertices;
|
||||
|
||||
+/** Weight of the AnimMesh. */
|
||||
+ float mWeight;
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
|
||||
aiAnimMesh()
|
||||
@@ -445,6 +448,27 @@ struct aiAnimMesh
|
||||
#endif
|
||||
};
|
||||
|
||||
+// ---------------------------------------------------------------------------
|
||||
+/** @brief Enumerates the methods of mesh morphing supported by Assimp.
|
||||
+ */
|
||||
+enum aiMorphingMethod
|
||||
+{
|
||||
+ /** Interpolation between morph targets */
|
||||
+ aiMorphingMethod_VERTEX_BLEND = 0x1,
|
||||
+
|
||||
+ /** Normalized morphing between morph targets */
|
||||
+ aiMorphingMethod_MORPH_NORMALIZED = 0x2,
|
||||
+
|
||||
+ /** Relative morphing between morph targets */
|
||||
+ aiMorphingMethod_MORPH_RELATIVE = 0x3,
|
||||
+
|
||||
+ /** This value is not used. It is just here to force the
|
||||
+ * compiler to map this enum to a 32 Bit integer.
|
||||
+ */
|
||||
+#ifndef SWIG
|
||||
+ _aiMorphingMethod_Force32Bit = INT_MAX
|
||||
+#endif
|
||||
+}; //! enum aiMorphingMethod
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
/** @brief A mesh represents a geometry or model with a single material.
|
||||
@@ -599,15 +623,18 @@ struct aiMesh
|
||||
C_STRUCT aiString mName;
|
||||
|
||||
|
||||
- /** NOT CURRENTLY IN USE. The number of attachment meshes */
|
||||
+ /** The number of attachment meshes. Note! Currently only works with Collada loader. */
|
||||
unsigned int mNumAnimMeshes;
|
||||
|
||||
- /** NOT CURRENTLY IN USE. Attachment meshes for this mesh, for vertex-based animation.
|
||||
+ /** Attachment meshes for this mesh, for vertex-based animation.
|
||||
* Attachment meshes carry replacement data for some of the
|
||||
- * mesh'es vertex components (usually positions, normals). */
|
||||
+ * mesh'es vertex components (usually positions, normals).
|
||||
+ * Note! Currently only works with Collada loader.*/
|
||||
C_STRUCT aiAnimMesh** mAnimMeshes;
|
||||
|
||||
-
|
||||
+ /** Method of morphing when animeshes are specified. */
|
||||
+ unsigned int mMethod;
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
|
||||
//! Default constructor. Initializes all members to 0
|
||||
@@ -732,7 +759,6 @@ struct aiMesh
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
-
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif //! extern "C"
|
||||
--
|
||||
2.9.3
|
||||
|
||||
24
0978918f7148fbcd3d05cc6573dae7859975a895.patch
Normal file
24
0978918f7148fbcd3d05cc6573dae7859975a895.patch
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
diff -rupN --no-dereference assimp-6.0.2/code/AssetLib/Q3D/Q3DLoader.cpp assimp-6.0.2-new/code/AssetLib/Q3D/Q3DLoader.cpp
|
||||
--- assimp-6.0.2/code/AssetLib/Q3D/Q3DLoader.cpp 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/code/AssetLib/Q3D/Q3DLoader.cpp 2025-12-14 20:02:55.733930684 +0100
|
||||
@@ -55,6 +55,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
#include <assimp/IOSystem.hpp>
|
||||
|
||||
+#include <limits>
|
||||
+
|
||||
namespace Assimp {
|
||||
|
||||
static constexpr aiImporterDesc desc = {
|
||||
@@ -309,6 +311,11 @@ void Q3DImporter::InternReadFile(const s
|
||||
throw DeadlyImportError("Quick3D: Invalid texture. Width or height is zero");
|
||||
}
|
||||
|
||||
+ const unsigned int uint_max = std::numeric_limits<unsigned int>::max();
|
||||
+ if (tex->mWidth > (uint_max / tex->mHeight)) {
|
||||
+ throw DeadlyImportError("Quick3D: Texture dimensions are too large, resulting in overflow.");
|
||||
+ }
|
||||
+
|
||||
unsigned int mul = tex->mWidth * tex->mHeight;
|
||||
aiTexel *begin = tex->pcData = new aiTexel[mul];
|
||||
aiTexel *const end = &begin[mul - 1] + 1;
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
diff -up ./port/PyAssimp/pyassimp/helper.py.pythonpath ./port/PyAssimp/pyassimp/helper.py
|
||||
--- ./port/PyAssimp/pyassimp/helper.py.pythonpath 2016-05-21 19:54:37.152745935 -0400
|
||||
+++ ./port/PyAssimp/pyassimp/helper.py 2016-05-21 19:57:28.578516453 -0400
|
||||
@@ -22,6 +22,7 @@ additional_dirs, ext_whitelist = [],[]
|
||||
# depending on the platform we're running on.
|
||||
if os.name=='posix':
|
||||
additional_dirs.append('./')
|
||||
+ additional_dirs.append('/usr/lib64/')
|
||||
additional_dirs.append('/usr/lib/')
|
||||
additional_dirs.append('/usr/local/lib/')
|
||||
|
||||
@@ -29,6 +30,7 @@ if os.name=='posix':
|
||||
# currently there's always a symlink called
|
||||
# libassimp.so in /usr/local/lib.
|
||||
ext_whitelist.append('.so')
|
||||
+ ext_whitelist.append('.3')
|
||||
# libassimp.dylib in /usr/local/lib
|
||||
ext_whitelist.append('.dylib')
|
||||
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
--- assimp-3.3.1/assimp.pc.in.fedora 2017-05-18 07:19:36.251314963 +0200
|
||||
+++ assimp-3.3.1/assimp.pc.in 2017-05-18 07:20:26.038525493 +0200
|
||||
@@ -1,7 +1,7 @@
|
||||
prefix=@CMAKE_INSTALL_PREFIX@
|
||||
-exec_prefix=@CMAKE_INSTALL_PREFIX@/@ASSIMP_BIN_INSTALL_DIR@
|
||||
-libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@
|
||||
-includedir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_INCLUDE_INSTALL_DIR@/assimp
|
||||
+exec_prefix=@ASSIMP_BIN_INSTALL_DIR@
|
||||
+libdir=@ASSIMP_LIB_INSTALL_DIR@
|
||||
+includedir=@ASSIMP_INCLUDE_INSTALL_DIR@/assimp
|
||||
|
||||
Name: @CMAKE_PROJECT_NAME@
|
||||
Description: Import various well-known 3D model formats in an uniform manner.
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
diff -up assimp-3.3.1/code/ByteSwapper.h.than assimp-3.3.1/code/ByteSwapper.h
|
||||
diff -up assimp-3.3.1/code/glTFAsset.inl.than assimp-3.3.1/code/glTFAsset.inl
|
||||
--- assimp-3.3.1/code/glTFAsset.inl.than 2017-05-05 17:28:29.754976483 -0400
|
||||
+++ assimp-3.3.1/code/glTFAsset.inl 2017-05-05 17:28:52.995404721 -0400
|
||||
@@ -40,6 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
|
||||
#include "StringUtils.h"
|
||||
|
||||
+using namespace Assimp;
|
||||
namespace glTF {
|
||||
|
||||
namespace {
|
||||
|
|
@ -1,201 +0,0 @@
|
|||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 8455bb8..c8e0d88 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -211,6 +211,26 @@ IF ( ASSIMP_NO_EXPORT )
|
||||
MESSAGE( STATUS "Build an import-only version of Assimp." )
|
||||
ENDIF( ASSIMP_NO_EXPORT )
|
||||
|
||||
+# Search for poly2tri
|
||||
+FIND_LIBRARY(POLY2TRI_LIB poly2tri HINTS ${POLY2TRI_LIB_PATH})
|
||||
+FIND_FILE(POLY2TRI_H poly2tri.h PATHS ${POLY2TRI_INCLUDE_PATH})
|
||||
+IF (POLY2TRI_LIB AND POLY2TRI_H)
|
||||
+ message(status "Found External poly2tri")
|
||||
+ SET(HAVE_POLY2TRI true)
|
||||
+ELSE(POLY2TRI_LIB AND POLY2TRI_H)
|
||||
+ SET(HAVE_POLY2TRI false)
|
||||
+ENDIF(POLY2TRI_LIB AND POLY2TRI_H)
|
||||
+
|
||||
+# Search for clipper
|
||||
+FIND_LIBRARY(CLIPPER_LIB polyclipping HINTS ${CLIPPER_LIB_PATH})
|
||||
+FIND_FILE(CLIPPER_H clipper.hpp PATHS ${CLIPPER_INCLUDE_PATH})
|
||||
+IF (CLIPPER_LIB AND CLIPPER_H)
|
||||
+ message(status "Found External clipper")
|
||||
+ SET(HAVE_CLIPPER true)
|
||||
+ELSE(CLIPPER_LIB AND CLIPPER_H)
|
||||
+ SET(HAVE_CLIPPER false)
|
||||
+ENDIF(CLIPPER_LIB AND CLIPPER_H)
|
||||
+
|
||||
SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING
|
||||
"describe the current architecture."
|
||||
)
|
||||
diff --git a/code/BlenderTessellator.h b/code/BlenderTessellator.h
|
||||
index 530bd2c..a6c9d9e 100644
|
||||
--- a/code/BlenderTessellator.h
|
||||
+++ b/code/BlenderTessellator.h
|
||||
@@ -142,7 +142,7 @@ namespace Assimp
|
||||
|
||||
#if ASSIMP_BLEND_WITH_POLY_2_TRI
|
||||
|
||||
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
|
||||
+#include "poly2tri/poly2tri.h"
|
||||
|
||||
namespace Assimp
|
||||
{
|
||||
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
|
||||
index 35ecf50..d549c89 100644
|
||||
--- a/code/CMakeLists.txt
|
||||
+++ b/code/CMakeLists.txt
|
||||
@@ -655,12 +655,15 @@ SET( ConvertUTF_SRCS
|
||||
)
|
||||
SOURCE_GROUP( ConvertUTF FILES ${ConvertUTF_SRCS})
|
||||
|
||||
+if (NOT HAVE_CLIPPER)
|
||||
SET( Clipper_SRCS
|
||||
../contrib/clipper/clipper.hpp
|
||||
../contrib/clipper/clipper.cpp
|
||||
)
|
||||
SOURCE_GROUP( Clipper FILES ${Clipper_SRCS})
|
||||
-
|
||||
+else (NOT HAVE_CLIPPER)
|
||||
+SET( Clipper_SRCS "")
|
||||
+endif(NOT HAVE_CLIPPER)
|
||||
|
||||
SET( Poly2Tri_SRCS
|
||||
../contrib/poly2tri/poly2tri/common/shapes.cc
|
||||
@@ -743,8 +746,6 @@ SET( assimp_src
|
||||
# Third-party libraries
|
||||
${IrrXML_SRCS}
|
||||
${ConvertUTF_SRCS}
|
||||
- ${unzip_compile_SRCS}
|
||||
- ${Poly2Tri_SRCS}
|
||||
${Clipper_SRCS}
|
||||
${openddl_parser_SRCS}
|
||||
# Necessary to show the headers in the project when using the VC++ generator:
|
||||
@@ -753,6 +754,8 @@ SET( assimp_src
|
||||
${COMPILER_HEADERS}
|
||||
|
||||
)
|
||||
+
|
||||
+
|
||||
ADD_DEFINITIONS( -DOPENDDLPARSER_BUILD )
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
@@ -821,6 +824,19 @@ else (UNZIP_FOUND)
|
||||
INCLUDE_DIRECTORIES("../")
|
||||
endif (UNZIP_FOUND)
|
||||
|
||||
+if (HAVE_POLY2TRI)
|
||||
+ INCLUDE_DIRECTORIES(${POLY2TRI_INCLUDE_PATH})
|
||||
+ TARGET_LINK_LIBRARIES(assimp ${POLY2TRI_LIB})
|
||||
+endif(HAVE_POLY2TRI)
|
||||
+
|
||||
+if (HAVE_CLIPPER)
|
||||
+ INCLUDE_DIRECTORIES(${CLIPPER_INCLUDE_PATH})
|
||||
+ TARGET_LINK_LIBRARIES(assimp ${CLIPPER_LIB})
|
||||
+else (HAVE_CLIPPER)
|
||||
+ INCLUDE_DIRECTORIES(../contrib/clipper)
|
||||
+endif(HAVE_CLIPPER)
|
||||
+
|
||||
+
|
||||
INSTALL( TARGETS assimp
|
||||
LIBRARY DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
|
||||
ARCHIVE DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
|
||||
diff --git a/code/D3MFImporter.cpp b/code/D3MFImporter.cpp
|
||||
index 1a97168..7377eb4 100644
|
||||
--- a/code/D3MFImporter.cpp
|
||||
+++ b/code/D3MFImporter.cpp
|
||||
@@ -44,7 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include <assimp/IOStream.hpp>
|
||||
#include <assimp/IOSystem.hpp>
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
-#include <contrib/unzip/unzip.h>
|
||||
+#include <minizip/unzip.h>
|
||||
#include "irrXMLWrapper.h"
|
||||
#include "StringComparison.h"
|
||||
#include "StringUtils.h"
|
||||
diff --git a/code/D3MFOpcPackage.cpp b/code/D3MFOpcPackage.cpp
|
||||
index 7cc1dd5..2b007db 100644
|
||||
--- a/code/D3MFOpcPackage.cpp
|
||||
+++ b/code/D3MFOpcPackage.cpp
|
||||
@@ -42,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include "D3MFOpcPackage.h"
|
||||
#include "Exceptional.h"
|
||||
|
||||
-#include <contrib/unzip/unzip.h>
|
||||
+#include <minizip/unzip.h>
|
||||
#include <assimp/IOStream.hpp>
|
||||
#include <assimp/IOSystem.hpp>
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
diff --git a/code/IFCGeometry.cpp b/code/IFCGeometry.cpp
|
||||
index 5a2e4a0..0926498 100644
|
||||
--- a/code/IFCGeometry.cpp
|
||||
+++ b/code/IFCGeometry.cpp
|
||||
@@ -49,8 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include "PolyTools.h"
|
||||
#include "ProcessHelper.h"
|
||||
|
||||
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
|
||||
-#include "../contrib/clipper/clipper.hpp"
|
||||
+#include "poly2tri/poly2tri.h"
|
||||
+#include "clipper.hpp"
|
||||
#include <memory>
|
||||
|
||||
#include <iterator>
|
||||
diff --git a/code/IFCLoader.cpp b/code/IFCLoader.cpp
|
||||
index 34977f5..bc655c0 100644
|
||||
--- a/code/IFCLoader.cpp
|
||||
+++ b/code/IFCLoader.cpp
|
||||
@@ -50,7 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include <tuple>
|
||||
|
||||
#ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
|
||||
-# include <contrib/unzip/unzip.h>
|
||||
+# include <minizip/unzip.h>
|
||||
#endif
|
||||
|
||||
#include "IFCLoader.h"
|
||||
diff --git a/code/IFCOpenings.cpp b/code/IFCOpenings.cpp
|
||||
index 51ea143..f0915fb 100644
|
||||
--- a/code/IFCOpenings.cpp
|
||||
+++ b/code/IFCOpenings.cpp
|
||||
@@ -49,8 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include "PolyTools.h"
|
||||
#include "ProcessHelper.h"
|
||||
|
||||
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
|
||||
-#include "../contrib/clipper/clipper.hpp"
|
||||
+#include "poly2tri/poly2tri.h"
|
||||
+#include "clipper.hpp"
|
||||
|
||||
#include <iterator>
|
||||
|
||||
diff --git a/code/Q3BSPZipArchive.h b/code/Q3BSPZipArchive.h
|
||||
index e46a11b..da93e5c 100644
|
||||
--- a/code/Q3BSPZipArchive.h
|
||||
+++ b/code/Q3BSPZipArchive.h
|
||||
@@ -40,7 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#ifndef AI_Q3BSP_ZIPARCHIVE_H_INC
|
||||
#define AI_Q3BSP_ZIPARCHIVE_H_INC
|
||||
|
||||
-#include <contrib/unzip/unzip.h>
|
||||
+#include <minizip/unzip.h>
|
||||
#include <assimp/IOStream.hpp>
|
||||
#include <assimp/IOSystem.hpp>
|
||||
#include <string>
|
||||
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
|
||||
index df0139d..8b26f22 100644
|
||||
--- a/test/CMakeLists.txt
|
||||
+++ b/test/CMakeLists.txt
|
||||
@@ -37,7 +37,8 @@
|
||||
#----------------------------------------------------------------------
|
||||
cmake_minimum_required( VERSION 2.6 )
|
||||
|
||||
-INCLUDE( AddGTest )
|
||||
+# Search for Google Test
|
||||
+FIND_PACKAGE(GTest)
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
${Assimp_SOURCE_DIR}/include
|
||||
diff --git a/tools/assimp_cmd/CMakeLists.txt b/tools/assimp_cmd/CMakeLists.txt
|
||||
index f8af93a..3f9a902 100644
|
||||
37
assimp-docs.patch
Normal file
37
assimp-docs.patch
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
diff -rupN --no-dereference assimp-6.0.2/doc/CMakeLists.txt assimp-6.0.2-new/doc/CMakeLists.txt
|
||||
--- assimp-6.0.2/doc/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/doc/CMakeLists.txt 2025-08-17 10:36:53.475374100 +0200
|
||||
@@ -33,9 +33,9 @@ if( DEFINED CMAKE_INSTALL_DOCDIR )
|
||||
DESTINATION ${CMAKE_INSTALL_DOCDIR}
|
||||
)
|
||||
install(FILES
|
||||
- ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/AnimationOverview.png
|
||||
- ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/AnimationOverview.svg
|
||||
- ${CMAKE_CURRENT_SOURCE_DIR}/AssimpDoc_Html/dragonsplash.png
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/architecture/AnimationOverview.png
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/architecture/AnimationOverview.svg
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/images/dragonsplash.png
|
||||
DESTINATION ${CMAKE_INSTALL_DOCDIR}/${HTML_OUTPUT}
|
||||
)
|
||||
endif()
|
||||
diff -rupN --no-dereference assimp-6.0.2/doc/Doxyfile.in assimp-6.0.2-new/doc/Doxyfile.in
|
||||
--- assimp-6.0.2/doc/Doxyfile.in 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/doc/Doxyfile.in 2025-08-17 10:36:53.474954432 +0200
|
||||
@@ -952,7 +952,7 @@ RECURSIVE = NO
|
||||
# Note that relative paths are relative to the directory from which doxygen is
|
||||
# run.
|
||||
|
||||
-EXCLUDE =
|
||||
+EXCLUDE = @PROJECT_BINARY_DIR@
|
||||
|
||||
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
||||
# directories that are symbolic links (a Unix file system feature) are excluded
|
||||
@@ -1221,7 +1221,7 @@ GENERATE_HTML = YES
|
||||
# The default directory is: html.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
-HTML_OUTPUT = html
|
||||
+HTML_OUTPUT = AssimpDoc_Html
|
||||
|
||||
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
|
||||
# generated HTML page (for example: .htm, .php, .asp).
|
||||
12
assimp-nozlib.patch
Normal file
12
assimp-nozlib.patch
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
diff -rupN --no-dereference assimp-6.0.2/contrib/zlib/CMakeLists.txt assimp-6.0.2-new/contrib/zlib/CMakeLists.txt
|
||||
--- assimp-6.0.2/contrib/zlib/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/contrib/zlib/CMakeLists.txt 2025-08-17 10:36:53.187611066 +0200
|
||||
@@ -196,7 +196,7 @@ if(MINGW)
|
||||
set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
|
||||
endif(MINGW)
|
||||
|
||||
-add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||
+add_library(zlibstatic OBJECT ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||
|
||||
IF(ASSIMP_INSTALL)
|
||||
INSTALL( TARGETS zlibstatic
|
||||
19
assimp-pythonpath.patch
Normal file
19
assimp-pythonpath.patch
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
diff -rupN --no-dereference assimp-6.0.2/port/PyAssimp/pyassimp/helper.py assimp-6.0.2-new/port/PyAssimp/pyassimp/helper.py
|
||||
--- assimp-6.0.2/port/PyAssimp/pyassimp/helper.py 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/port/PyAssimp/pyassimp/helper.py 2025-08-17 10:36:52.891631207 +0200
|
||||
@@ -29,6 +29,7 @@ additional_dirs, ext_whitelist = [],[]
|
||||
# depending on the platform we're running on.
|
||||
if os.name=='posix':
|
||||
additional_dirs.append('./')
|
||||
+ additional_dirs.append('/usr/lib64/')
|
||||
additional_dirs.append('/usr/lib/')
|
||||
additional_dirs.append('/usr/lib/x86_64-linux-gnu/')
|
||||
additional_dirs.append('/usr/lib/aarch64-linux-gnu/')
|
||||
@@ -54,6 +55,7 @@ if os.name=='posix':
|
||||
# currently there's always a symlink called
|
||||
# libassimp.so in /usr/local/lib.
|
||||
ext_whitelist.append('.so')
|
||||
+ ext_whitelist.append('.3')
|
||||
# libassimp.dylib in /usr/local/lib
|
||||
ext_whitelist.append('.dylib')
|
||||
|
||||
28
assimp-tests.patch
Normal file
28
assimp-tests.patch
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
diff -rupN --no-dereference assimp-6.0.2/CMakeLists.txt assimp-6.0.2-new/CMakeLists.txt
|
||||
--- assimp-6.0.2/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/CMakeLists.txt 2025-08-17 10:36:53.765126531 +0200
|
||||
@@ -813,6 +813,7 @@ IF ( ASSIMP_BUILD_SAMPLES )
|
||||
ENDIF ()
|
||||
|
||||
IF ( ASSIMP_BUILD_TESTS )
|
||||
+ ENABLE_TESTING()
|
||||
ADD_SUBDIRECTORY( test/ )
|
||||
ENDIF ()
|
||||
|
||||
diff -rupN --no-dereference assimp-6.0.2/test/CMakeLists.txt assimp-6.0.2-new/test/CMakeLists.txt
|
||||
--- assimp-6.0.2/test/CMakeLists.txt 2025-08-17 10:36:52.887323815 +0200
|
||||
+++ assimp-6.0.2-new/test/CMakeLists.txt 2025-08-17 10:36:53.765489323 +0200
|
||||
@@ -36,6 +36,7 @@
|
||||
#
|
||||
#----------------------------------------------------------------------
|
||||
cmake_minimum_required( VERSION 3.10 )
|
||||
+include(GoogleTest)
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
${Assimp_SOURCE_DIR}/test/unit
|
||||
@@ -267,4 +268,4 @@ target_link_libraries( unit assimp ${pla
|
||||
|
||||
add_subdirectory(headercheck)
|
||||
|
||||
-add_test( unittests unit )
|
||||
+gtest_discover_tests(unit)
|
||||
248
assimp-unbundle.patch
Normal file
248
assimp-unbundle.patch
Normal file
|
|
@ -0,0 +1,248 @@
|
|||
diff -rupN --no-dereference assimp-6.0.2/code/AssetLib/Blender/BlenderTessellator.h assimp-6.0.2-new/code/AssetLib/Blender/BlenderTessellator.h
|
||||
--- assimp-6.0.2/code/AssetLib/Blender/BlenderTessellator.h 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/code/AssetLib/Blender/BlenderTessellator.h 2025-08-18 20:15:00.250159883 +0200
|
||||
@@ -143,7 +143,7 @@ namespace Assimp
|
||||
|
||||
#if ASSIMP_BLEND_WITH_POLY_2_TRI
|
||||
|
||||
-#include "contrib/poly2tri/poly2tri/poly2tri.h"
|
||||
+#include <poly2tri/poly2tri.h>
|
||||
|
||||
namespace Assimp
|
||||
{
|
||||
diff -rupN --no-dereference assimp-6.0.2/code/AssetLib/IFC/IFCGeometry.cpp assimp-6.0.2-new/code/AssetLib/IFC/IFCGeometry.cpp
|
||||
--- assimp-6.0.2/code/AssetLib/IFC/IFCGeometry.cpp 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/code/AssetLib/IFC/IFCGeometry.cpp 2025-08-18 20:15:00.250503229 +0200
|
||||
@@ -45,7 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
#include "IFCUtil.h"
|
||||
#include "Common/PolyTools.h"
|
||||
#include "PostProcessing/ProcessHelper.h"
|
||||
-#include "contrib/poly2tri/poly2tri/poly2tri.h"
|
||||
+#include <poly2tri/poly2tri.h>
|
||||
#include "contrib/clipper/clipper.hpp"
|
||||
|
||||
#include <iterator>
|
||||
diff -rupN --no-dereference assimp-6.0.2/code/AssetLib/IFC/IFCOpenings.cpp assimp-6.0.2-new/code/AssetLib/IFC/IFCOpenings.cpp
|
||||
--- assimp-6.0.2/code/AssetLib/IFC/IFCOpenings.cpp 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/code/AssetLib/IFC/IFCOpenings.cpp 2025-08-18 20:15:00.250876754 +0200
|
||||
@@ -47,7 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
#include "IFCUtil.h"
|
||||
#include "Common/PolyTools.h"
|
||||
#include "PostProcessing/ProcessHelper.h"
|
||||
-#include "contrib/poly2tri/poly2tri/poly2tri.h"
|
||||
+#include <poly2tri/poly2tri.h>
|
||||
#include "contrib/clipper/clipper.hpp"
|
||||
|
||||
#include <deque>
|
||||
diff -rupN --no-dereference assimp-6.0.2/code/CMakeLists.txt assimp-6.0.2-new/code/CMakeLists.txt
|
||||
--- assimp-6.0.2/code/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/code/CMakeLists.txt 2025-08-18 20:15:00.254124936 +0200
|
||||
@@ -1120,13 +1120,7 @@ IF(ASSIMP_HUNTER_ENABLED)
|
||||
hunter_add_package(pugixml)
|
||||
find_package(pugixml CONFIG REQUIRED)
|
||||
ELSEIF(NOT TARGET pugixml::pugixml)
|
||||
- SET( Pugixml_SRCS
|
||||
- ../contrib/pugixml/src/pugiconfig.hpp
|
||||
- ../contrib/pugixml/src/pugixml.cpp
|
||||
- ../contrib/pugixml/src/pugixml.hpp
|
||||
- )
|
||||
- INCLUDE_DIRECTORIES("../contrib/pugixml/src")
|
||||
- SOURCE_GROUP( Contrib\\Pugixml FILES ${Pugixml_SRCS})
|
||||
+ find_package(pugixml REQUIRED)
|
||||
ENDIF()
|
||||
|
||||
# utf8
|
||||
@@ -1134,7 +1128,7 @@ IF(ASSIMP_HUNTER_ENABLED)
|
||||
hunter_add_package(utf8)
|
||||
find_package(utf8cpp CONFIG REQUIRED)
|
||||
ELSE()
|
||||
- INCLUDE_DIRECTORIES("../contrib/utf8cpp/source")
|
||||
+ find_package(utf8cpp CONFIG REQUIRED)
|
||||
ENDIF()
|
||||
|
||||
# polyclipping
|
||||
@@ -1150,10 +1144,10 @@ ENDIF()
|
||||
#ENDIF()
|
||||
|
||||
# poly2tri
|
||||
-#IF(ASSIMP_HUNTER_ENABLED)
|
||||
-# hunter_add_package(poly2tri)
|
||||
-# find_package(poly2tri CONFIG REQUIRED)
|
||||
-#ELSE()
|
||||
+IF(HAVE_POLY2TRI)
|
||||
+ include_directories(${POLY2TRI_INCLUDE_PATH})
|
||||
+ set(Poly2Tri_SRCS "")
|
||||
+ELSE()
|
||||
SET( Poly2Tri_SRCS
|
||||
../contrib/poly2tri/poly2tri/common/shapes.cc
|
||||
../contrib/poly2tri/poly2tri/common/shapes.h
|
||||
@@ -1168,13 +1162,13 @@ ENDIF()
|
||||
../contrib/poly2tri/poly2tri/sweep/sweep_context.h
|
||||
)
|
||||
SOURCE_GROUP( Contrib\\Poly2Tri FILES ${Poly2Tri_SRCS})
|
||||
-#ENDIF()
|
||||
+ENDIF()
|
||||
|
||||
# minizip/unzip
|
||||
-IF(ASSIMP_HUNTER_ENABLED)
|
||||
- hunter_add_package(minizip)
|
||||
- find_package(minizip CONFIG REQUIRED)
|
||||
-ELSE()
|
||||
+#IF(ASSIMP_HUNTER_ENABLED)
|
||||
+# hunter_add_package(minizip)
|
||||
+# find_package(minizip CONFIG REQUIRED)
|
||||
+#ELSE()
|
||||
SET( unzip_SRCS
|
||||
../contrib/unzip/crypt.h
|
||||
../contrib/unzip/ioapi.c
|
||||
@@ -1183,7 +1177,7 @@ ELSE()
|
||||
../contrib/unzip/unzip.h
|
||||
)
|
||||
SOURCE_GROUP(Contrib\\unzip FILES ${unzip_SRCS})
|
||||
-ENDIF()
|
||||
+#ENDIF()
|
||||
|
||||
# zip (https://github.com/kuba--/zip)
|
||||
separate_arguments(ASSIMP_EXPORTERS_LIST UNIX_COMMAND ${ASSIMP_EXPORTERS_ENABLED})
|
||||
@@ -1279,6 +1273,7 @@ ENDIF ()
|
||||
IF (NOT ASSIMP_HUNTER_ENABLED AND (RT_FOUND OR WIN32))
|
||||
SET( ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC 1 )
|
||||
ADD_DEFINITIONS( -DASSIMP_IMPORTER_GLTF_USE_OPEN3DGC=1 )
|
||||
+ INCLUDE_DIRECTORIES( "../contrib" )
|
||||
ELSE ()
|
||||
SET (open3dgc_SRCS "")
|
||||
MESSAGE (INFO " Hunter enabled or RT-extension not found. glTF import/export will be built without Open3DGC-compression.")
|
||||
@@ -1290,7 +1285,8 @@ IF(ASSIMP_HUNTER_ENABLED)
|
||||
hunter_add_package(RapidJSON)
|
||||
find_package(RapidJSON CONFIG REQUIRED)
|
||||
ELSE()
|
||||
- INCLUDE_DIRECTORIES("../contrib/rapidjson/include")
|
||||
+ find_package(RapidJSON REQUIRED)
|
||||
+ include_directories(${RapidJSON_INCLUDE_DIRS})
|
||||
ADD_DEFINITIONS( -DRAPIDJSON_HAS_STDSTRING=1)
|
||||
option( ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR "Suppress rapidjson warning on MSVC (NOTE: breaks android build)" ON )
|
||||
if(ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR)
|
||||
@@ -1303,11 +1299,6 @@ IF(ASSIMP_HUNTER_ENABLED)
|
||||
hunter_add_package(stb)
|
||||
find_package(stb CONFIG REQUIRED)
|
||||
ELSE()
|
||||
- SET( stb_SRCS
|
||||
- ../contrib/stb/stb_image.h
|
||||
- )
|
||||
- INCLUDE_DIRECTORIES("../contrib")
|
||||
- SOURCE_GROUP( Contrib\\stb FILES ${stb_SRCS})
|
||||
ENDIF()
|
||||
|
||||
# VC2010 fixes
|
||||
@@ -1489,7 +1480,6 @@ IF(ASSIMP_HUNTER_ENABLED)
|
||||
TARGET_LINK_LIBRARIES(assimp
|
||||
PUBLIC
|
||||
openddlparser::openddl_parser
|
||||
- minizip::minizip
|
||||
ZLIB::zlib
|
||||
RapidJSON::rapidjson
|
||||
utf8cpp
|
||||
@@ -1508,9 +1498,16 @@ ELSE()
|
||||
if (ASSIMP_BUILD_DRACO)
|
||||
target_link_libraries(assimp ${draco_LIBRARIES})
|
||||
endif()
|
||||
- if(TARGET pugixml::pugixml)
|
||||
- target_link_libraries(assimp pugixml::pugixml)
|
||||
- endif()
|
||||
+
|
||||
+ TARGET_LINK_LIBRARIES(assimp pugixml)
|
||||
+
|
||||
+ IF (HAVE_POLY2TRI)
|
||||
+ TARGET_LINK_LIBRARIES(assimp ${POLY2TRI_LIB})
|
||||
+ ENDIF()
|
||||
+
|
||||
+ IF (HAVE_CLIPPER)
|
||||
+ TARGET_LINK_LIBRARIES(assimp ${CLIPPER_LIB})
|
||||
+ ENDIF()
|
||||
ENDIF()
|
||||
|
||||
if(ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||
diff -rupN --no-dereference assimp-6.0.2/code/PostProcessing/TriangulateProcess.cpp assimp-6.0.2-new/code/PostProcessing/TriangulateProcess.cpp
|
||||
--- assimp-6.0.2/code/PostProcessing/TriangulateProcess.cpp 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/code/PostProcessing/TriangulateProcess.cpp 2025-08-18 20:15:00.251686318 +0200
|
||||
@@ -62,7 +62,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
#include "PostProcessing/TriangulateProcess.h"
|
||||
#include "PostProcessing/ProcessHelper.h"
|
||||
#include "Common/PolyTools.h"
|
||||
-#include "contrib/earcut-hpp/earcut.hpp"
|
||||
+#include <mapbox/earcut.hpp>
|
||||
|
||||
#include <memory>
|
||||
#include <cstdint>
|
||||
diff -rupN --no-dereference assimp-6.0.2/samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp assimp-6.0.2-new/samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp
|
||||
--- assimp-6.0.2/samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/samples/SimpleTexturedOpenGL/SimpleTexturedOpenGL/src/model_loading.cpp 2025-08-18 20:15:00.252020642 +0200
|
||||
@@ -24,7 +24,7 @@
|
||||
#endif // _MSC_VER
|
||||
|
||||
#define STB_IMAGE_IMPLEMENTATION
|
||||
-#include "contrib/stb/stb_image.h"
|
||||
+#include "stb_image.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(default: 4100) // Enable warning 'unreferenced formal parameter'
|
||||
diff -rupN --no-dereference assimp-6.0.2/test/CMakeLists.txt assimp-6.0.2-new/test/CMakeLists.txt
|
||||
--- assimp-6.0.2/test/CMakeLists.txt 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/test/CMakeLists.txt 2025-08-18 20:15:00.253409037 +0200
|
||||
@@ -43,14 +43,6 @@ INCLUDE_DIRECTORIES(
|
||||
${Assimp_SOURCE_DIR}/code
|
||||
)
|
||||
|
||||
-if(NOT ASSIMP_HUNTER_ENABLED)
|
||||
- INCLUDE_DIRECTORIES(
|
||||
- ${Assimp_SOURCE_DIR}/contrib/googletest/googletest/include
|
||||
- ${Assimp_SOURCE_DIR}/contrib/googletest/googletest/
|
||||
- ${Assimp_SOURCE_DIR}/contrib/pugixml/src
|
||||
- )
|
||||
-endif()
|
||||
-
|
||||
if (MSVC)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING")
|
||||
endif()
|
||||
@@ -234,26 +226,11 @@ add_executable( unit
|
||||
${POST_PROCESSES}
|
||||
)
|
||||
|
||||
-if(ASSIMP_HUNTER_ENABLED)
|
||||
- hunter_add_package(GTest)
|
||||
- find_package(GTest CONFIG REQUIRED)
|
||||
- target_link_libraries(unit GTest::gtest_main GTest::gmock)
|
||||
-else()
|
||||
- target_sources(unit PUBLIC ${Assimp_SOURCE_DIR}/contrib/googletest/googletest/src/gtest-all.cc)
|
||||
-endif()
|
||||
+find_package(GTest CONFIG REQUIRED)
|
||||
+target_link_libraries(unit GTest::gtest_main GTest::gmock)
|
||||
|
||||
# RapidJSON
|
||||
-IF(ASSIMP_HUNTER_ENABLED)
|
||||
- hunter_add_package(RapidJSON)
|
||||
- find_package(RapidJSON CONFIG REQUIRED)
|
||||
-ELSE()
|
||||
- INCLUDE_DIRECTORIES("../contrib/rapidjson/include")
|
||||
- ADD_DEFINITIONS( -DRAPIDJSON_HAS_STDSTRING=1)
|
||||
- option( ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR "Suppress rapidjson warning on MSVC (NOTE: breaks android build)" ON )
|
||||
- if(ASSIMP_RAPIDJSON_NO_MEMBER_ITERATOR)
|
||||
- ADD_DEFINITIONS( -DRAPIDJSON_NOMEMBERITERATORCLASS )
|
||||
- endif()
|
||||
-ENDIF()
|
||||
+find_package(RapidJSON CONFIG REQUIRED)
|
||||
|
||||
IF (ASSIMP_BUILD_DRACO)
|
||||
ADD_DEFINITIONS( -DASSIMP_ENABLE_DRACO )
|
||||
diff -rupN --no-dereference assimp-6.0.2/test/unit/utglTF2ImportExport.cpp assimp-6.0.2-new/test/unit/utglTF2ImportExport.cpp
|
||||
--- assimp-6.0.2/test/unit/utglTF2ImportExport.cpp 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/test/unit/utglTF2ImportExport.cpp 2025-08-18 20:15:00.253778700 +0200
|
||||
@@ -986,7 +986,7 @@ namespace {
|
||||
rapidjson::Document schemaDoc;
|
||||
schemaDoc.Parse(R"==({"properties":{"scene" : { "type" : "integer" }}, "required": [ "scene" ]})==");
|
||||
EXPECT_FALSE(schemaDoc.HasParseError());
|
||||
- m_schema.reset(new rapidjson::SchemaDocument(schemaDoc, m_schemaName.c_str(), static_cast<rapidjson::SizeType>(m_schemaName.size()), this));
|
||||
+ m_schema.reset(new rapidjson::SchemaDocument(schemaDoc, 0, 0, this));
|
||||
}
|
||||
|
||||
const rapidjson::SchemaDocument* GetRemoteDocument(const char* uri, rapidjson::SizeType) override {
|
||||
386
assimp.spec
386
assimp.spec
|
|
@ -1,57 +1,73 @@
|
|||
%define soversion 6
|
||||
|
||||
Name: assimp
|
||||
Version: 3.3.1
|
||||
Release: 12%{?dist}
|
||||
Version: 6.0.2
|
||||
Release: 6%{?dist}
|
||||
Summary: Library to import various 3D model formats into applications
|
||||
Group: Development/Libraries
|
||||
# Assimp is BSD, the bundled openddlparser is MIT.
|
||||
License: BSD and MIT
|
||||
URL: http://assimp.sourceforge.net
|
||||
#Source0: https://github.com/assimp/%{name}/archive/%{commit0}.tar.gz#/%{name}-%{shortcommit0}.tar.gz
|
||||
|
||||
# Assimp is BSD
|
||||
# Bundled contrib/clipper is Boost
|
||||
# Bundled contrib/Open3DGC is MIT
|
||||
# Bundled contrib/openddlparser is MIT
|
||||
# Bundled contrib/stb is MIT
|
||||
# Bundled contrib/unzip is zlib
|
||||
# Bundled contrib/zip is unlicense
|
||||
# Bundled contrib/zlib is zlib
|
||||
License: BSD-3-Clause AND MIT AND BSL-1.0 AND Unlicense AND Zlib
|
||||
URL: https://github.com/assimp/assimp
|
||||
|
||||
# Github releases include nonfree models, source tarball must be re-generated
|
||||
# using assimp_generate_tarball.sh
|
||||
Source0: %{name}-%{version}-free.tar.xz
|
||||
Source1: assimp_generate_tarball.sh
|
||||
# Current 3.3.1 not compilable under s390x and ppc64le - BigEndian issues
|
||||
Patch0: %{name}-3.3.1-unbundle.patch
|
||||
# Add /usr/lib64 to library lookup paths for python modules
|
||||
Patch1: %{name}-3.2.0-pythonpath.patch
|
||||
# Fix library and include paths in assimp-config.cmake
|
||||
# Fixes rhbz#1263698, not submitted upstream
|
||||
# Rehashed to 3.3.1
|
||||
Patch2: 0001-Assimp-cmake-provider-fix.patch
|
||||
# fix FTBFS on bigendian platform s390x/ppc64
|
||||
Patch3: assimp-3.3.1-namespace-bigendian.patch
|
||||
Patch10: assimp-3.3.1-install-pkgconfig.patch
|
||||
#Upstream backports
|
||||
# Collada morph animation
|
||||
Patch100: 0001-Morph-animation-support-for-collada.patch
|
||||
# Generate doc from CMakeFiles. Backported from Upstream
|
||||
Patch101: 0001-Enable-doxygen-been-properly-used-from-cmake-build-a.patch
|
||||
# Strips bundled irrXML out of build files, and allows project to build
|
||||
# against system versions of the libraries (not yet submitted upstream)
|
||||
Patch102: 0001-Apply-mechanism-to-decide-use-for-IrrXML-external-or.patch
|
||||
|
||||
BuildRequires: boost-devel
|
||||
BuildRequires: cmake
|
||||
BuildRequires: dos2unix
|
||||
BuildRequires: irrlicht-devel
|
||||
BuildRequires: irrXML-devel
|
||||
BuildRequires: doxygen
|
||||
BuildRequires: poly2tri-devel
|
||||
BuildRequires: gtest-devel
|
||||
BuildRequires: pkgconfig(zzip-zlib-config)
|
||||
BuildRequires: pkgconfig(zlib)
|
||||
BuildRequires: pkgconfig(minizip)
|
||||
# Un-bundle poly2tri, pugixml, utf8cpp, RapidJSON, clipper
|
||||
Patch0: %{name}-unbundle.patch
|
||||
# Add /usr/lib64 to library lookup paths for python modules
|
||||
Patch1: %{name}-pythonpath.patch
|
||||
# Prevent export of bundled zlibstatic library
|
||||
Patch2: %{name}-nozlib.patch
|
||||
# Exclude the build directory from the doxygen-generated documentation
|
||||
# Fix HTML_OUTPUT dir in doxyfile
|
||||
# Fix installing images from doc/architecture
|
||||
Patch3: %{name}-docs.patch
|
||||
# Enable ctest
|
||||
Patch4: %{name}-tests.patch
|
||||
# Backport fix for CVE-2025-11277
|
||||
Patch5: https://github.com/assimp/assimp/commit/0978918f7148fbcd3d05cc6573dae7859975a895.patch
|
||||
# PyAssimp: Re-add 'aiProcess_Triangulate' (#2423174)
|
||||
Patch6: https://github.com/assimp/assimp/commit/dd98d4aea3d9d2b3544540ea44eeb15c3616dbb7.patch
|
||||
|
||||
|
||||
BuildRequires: boost-devel
|
||||
BuildRequires: cmake
|
||||
BuildRequires: doxygen
|
||||
BuildRequires: earcut-hpp-devel
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: gtest-devel
|
||||
BuildRequires: make
|
||||
BuildRequires: pkgconfig(python3)
|
||||
BuildRequires: poly2tri-devel
|
||||
BuildRequires: pugixml-devel
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: zlib-devel
|
||||
# Need to BR -static packages for header-only libraries for tracking, per
|
||||
# guidelines
|
||||
BuildRequires: rapidjson-devel
|
||||
BuildRequires: rapidjson-static
|
||||
BuildRequires: stb_image-devel
|
||||
BuildRequires: stb_image-static
|
||||
BuildRequires: utf8cpp-devel
|
||||
BuildRequires: utf8cpp-static
|
||||
|
||||
# Incompatible - https://github.com/assimp/assimp/issues/788
|
||||
#BuildRequires: pkgconfig(polyclipping)
|
||||
Provides: bundled(polyclipping) = 4.8.8
|
||||
BuildRequires: pkgconfig(python2)
|
||||
%if 0%{?fedora} > 23
|
||||
BuildRequires: pkgconfig(ILUT)
|
||||
BuildRequires: pkgconfig(python3)
|
||||
%endif
|
||||
|
||||
Provides: bundled(polyclipping) = 4.8.8
|
||||
Provides: bundled(open3dgc)
|
||||
Provides: bundled(openddl-parser)
|
||||
Provides: bundled(unzip)
|
||||
Provides: bundled(minzip)
|
||||
|
||||
|
||||
%description
|
||||
Assimp, the Open Asset Import Library, is a free library to import
|
||||
|
|
@ -60,41 +76,27 @@ to provide a full asset conversion pipeline for use in game
|
|||
engines and real-time rendering systems, but is not limited
|
||||
to these applications.
|
||||
|
||||
|
||||
%package devel
|
||||
Summary: Header files and libraries for assimp
|
||||
Group: Development/Libraries
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: poly2tri-devel
|
||||
Requires: pugixml-devel
|
||||
|
||||
%description devel
|
||||
This package contains the header files and libraries
|
||||
for assimp. If you would like to develop programs using assimp,
|
||||
you will need to install assimp-devel.
|
||||
|
||||
%package -n python2-%{name}
|
||||
Summary: Python bindings for assimp
|
||||
Group: Development/Libraries
|
||||
BuildArch: noarch
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: python2
|
||||
Provides: %{name}-python = %{version}-%{release}
|
||||
Obsoletes: %{name}-python < 3.1.1
|
||||
|
||||
%description -n python2-%{name}
|
||||
This package contains the PyAssimp python bindings
|
||||
|
||||
%if 0%{?fedora} > 23
|
||||
%package -n python3-%{name}
|
||||
Summary: Python 3 bindings for assimp
|
||||
Group: Development/Libraries
|
||||
BuildArch: noarch
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: python3
|
||||
Provides: %{name}-python3 = %{version}-%{release}
|
||||
Obsoletes: %{name}-python3 < 3.1.1
|
||||
|
||||
%description -n python3-%{name}
|
||||
This package contains the PyAssimp3 python bindings
|
||||
%endif
|
||||
|
||||
|
||||
%package doc
|
||||
Summary: Assimp documentation
|
||||
|
|
@ -103,89 +105,237 @@ BuildArch: noarch
|
|||
%description doc
|
||||
%{summary}.
|
||||
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
# Get rid of bundled libs so we can't accidently build against them
|
||||
#rm -r contrib/clipper
|
||||
rm -r contrib/irrXML
|
||||
rm -r contrib/zlib
|
||||
rm -r contrib/unzip
|
||||
rm -r contrib/poly2tri
|
||||
%patch0 -p1 -b .unbundle
|
||||
%patch1 -p1 -b .pythonpath
|
||||
%patch2 -p1 -b .cmakefix
|
||||
%patch3 -p1 -b .bigendian
|
||||
# Need to be upstreamed
|
||||
%patch10 -p1 -b .pkgconfig
|
||||
# Backported from upstream
|
||||
%patch100 -p1 -b .docfix
|
||||
%patch101 -p1 -b .qt3d
|
||||
%patch102 -p1 -b .systemirrxml
|
||||
%autosetup -p1 -n %{name}-%{version}
|
||||
# Get rid of bundled libs so we can't accidently build against them, except:
|
||||
# - clipper: Unpackaged
|
||||
# - Open3DGC: Unpackaged
|
||||
# - openddlparser: Unpackaged
|
||||
# - tinyusdz: Unpackaged
|
||||
# - unzip: Modified minizip
|
||||
# - zip: Modified minizip
|
||||
find contrib/ -maxdepth 1 -mindepth 1 \
|
||||
| grep -Ev '(clipper|Open3DGC|openddlparser|tinyusdz|unzip|zip)' \
|
||||
| xargs rm -r
|
||||
|
||||
mv contrib/openddlparser/LICENSE contrib/openddlparser/LICENSE.openddlparser
|
||||
|
||||
|
||||
%build
|
||||
mkdir build
|
||||
pushd build
|
||||
%cmake .. \
|
||||
-DASSIMP_LIB_INSTALL_DIR=%{_libdir} \
|
||||
-DASSIMP_BIN_INSTALL_DIR=%{_bindir} \
|
||||
-DASSIMP_INCLUDE_INSTALL_DIR=%{_includedir} \
|
||||
%cmake \
|
||||
%ifarch s390x ppc64
|
||||
-DAI_BUILD_BIG_ENDIAN=TRUE \
|
||||
%endif
|
||||
-DBUILD_DOCS=ON \
|
||||
-DHTML_OUTPUT=%{name}-%{version} \
|
||||
-DCMAKE_INSTALL_DOCDIR=%{_docdir} \
|
||||
-DASSIMP_WARNINGS_AS_ERRORS=OFF \
|
||||
-DASSIMP_BUILD_ASSIMP_TOOLS=ON \
|
||||
-DASSIMP_BUILD_DOCS=ON \
|
||||
-DASSIMP_IGNORE_GIT_HASH=ON \
|
||||
-DHAVE_POLY2TRI=ON \
|
||||
-DPOLY2TRI_INCLUDE_PATH=%{_includedir}/poly2tri \
|
||||
-DSYSTEM_IRRXML=ON
|
||||
popd
|
||||
# To use system polyclipping if assimp ever becomes compatible:
|
||||
# -DCLIPPER_INCLUDE_PATH=%{_includedir}/polyclipping
|
||||
make %{?_smp_mflags} -C build
|
||||
-DPOLY2TRI_LIB=poly2tri \
|
||||
-DCMAKE_INSTALL_DOCDIR=%{_defaultdocdir}/%{name}
|
||||
|
||||
%cmake_build
|
||||
|
||||
# Fix file encoding
|
||||
dos2unix README LICENSE CREDITS port/PyAssimp/README.md
|
||||
iconv -f iso8859-1 -t utf-8 CREDITS > CREDITS.conv && mv -f CREDITS.conv CREDITS
|
||||
|
||||
%install
|
||||
rm -rf %{buildroot}
|
||||
make -C build install DESTDIR=%{buildroot}
|
||||
mkdir -p %{buildroot}%{python2_sitelib}/pyassimp/
|
||||
install -m0644 port/PyAssimp/pyassimp/*.py %{buildroot}%{python2_sitelib}/pyassimp/
|
||||
%if 0%{?fedora} > 23
|
||||
%cmake_install
|
||||
mkdir -p %{buildroot}%{python3_sitelib}/pyassimp/
|
||||
install -m0644 port/PyAssimp/pyassimp/*.py %{buildroot}%{python3_sitelib}/pyassimp/
|
||||
%endif
|
||||
|
||||
%post -p /sbin/ldconfig
|
||||
%postun -p /sbin/ldconfig
|
||||
|
||||
%check
|
||||
# Exclude tests that rely on nonbsd models
|
||||
%ctest --exclude-regex "utMD5Importer.importBoarMan|utMD5Importer.importBob|utMD2Importer.importDolphin|utMD2Importer.importFlag|utMD2Importer.importHorse|utQ3BSPImportExport.importerTest|utBlenderImporter.importBob|utBlenderImporter.importFleurOptonl|utPMXImporter.importTest|utXImporter.importDwarf" || :
|
||||
|
||||
|
||||
%files
|
||||
%license LICENSE
|
||||
%doc README CREDITS
|
||||
%license LICENSE
|
||||
%license contrib/clipper/License.txt
|
||||
%license contrib/openddlparser/LICENSE.openddlparser
|
||||
%license contrib/zip/UNLICENSE
|
||||
%doc Readme.md CREDITS
|
||||
%{_bindir}/assimp
|
||||
%{_libdir}/*.so.*
|
||||
%{_libdir}/libassimp.so.%{version}
|
||||
%{_libdir}/libassimp.so.%{soversion}
|
||||
|
||||
%files devel
|
||||
%{_includedir}/assimp
|
||||
%{_libdir}/*.so
|
||||
%{_libdir}/pkgconfig/*.pc
|
||||
%{_libdir}/cmake/*
|
||||
%{_includedir}/assimp/
|
||||
%{_libdir}/libassimp.so
|
||||
%{_libdir}/pkgconfig/assimp.pc
|
||||
%{_libdir}/cmake/assimp-*/
|
||||
|
||||
%files doc
|
||||
%{_docdir}/*
|
||||
|
||||
%files -n python2-%{name}
|
||||
%doc port/PyAssimp/README.md
|
||||
%{python_sitelib}/pyassimp
|
||||
|
||||
%if 0%{?fedora} > 23
|
||||
%files -n python3-%{name}
|
||||
%doc port/PyAssimp/README.md
|
||||
%{python3_sitelib}/pyassimp
|
||||
%endif
|
||||
%{python3_sitelib}/pyassimp/
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 6.0.2-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
|
||||
|
||||
* Sat Dec 27 2025 Sandro Mani <manisandro@gmail.com> - 6.0.2-5
|
||||
- PyAssimp: Re-add 'aiProcess_Triangulate' (#2423174)
|
||||
|
||||
* Sun Dec 14 2025 Sandro Mani <manisandro@gmail.com> - 6.0.2-4
|
||||
- Backport fix for CVE-2025-11277
|
||||
|
||||
* Fri Sep 19 2025 Python Maint <python-maint@redhat.com> - 6.0.2-3
|
||||
- Rebuilt for Python 3.14.0rc3 bytecode
|
||||
|
||||
* Mon Aug 18 2025 Sandro Mani <manisandro@gmail.com> - 6.0.2-2
|
||||
- Fix pugixml::pugixml dependency ending up in link interface of assimp::assimp
|
||||
|
||||
* Fri Aug 15 2025 Sandro Mani <manisandro@gmail.com> - 6.0.2-1
|
||||
- Update to 6.0.2
|
||||
|
||||
* Fri Aug 15 2025 Python Maint <python-maint@redhat.com> - 5.4.3-4
|
||||
- Rebuilt for Python 3.14.0rc2 bytecode
|
||||
|
||||
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.4.3-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Tue Jun 03 2025 Python Maint <python-maint@redhat.com> - 5.4.3-2
|
||||
- Rebuilt for Python 3.14
|
||||
|
||||
* Sat Mar 15 2025 Rich Mattes <richmattes@gmail.com> - 5.4.3-1
|
||||
- Update to release 5.4.3
|
||||
- Resolves: #2274012
|
||||
|
||||
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.1-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Wed Aug 28 2024 Miroslav Suchý <msuchy@redhat.com> - 5.3.1-4
|
||||
- convert license to SPDX
|
||||
|
||||
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.1-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Sat Jun 08 2024 Python Maint <python-maint@redhat.com> - 5.3.1-2
|
||||
- Rebuilt for Python 3.13
|
||||
|
||||
* Sun Mar 31 2024 Rich Mattes <richmattes@gmail.com> - 5.3.1-1
|
||||
- Update to release 5.3.1
|
||||
- Resolves: rhbz#2256587
|
||||
|
||||
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.5-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.2.5-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Wed Jan 03 2024 Scott K Logan <logans@cottsay.net> - 5.2.5-2
|
||||
- Add pugixml and poly2tri devel dependencies to assimp-devel
|
||||
|
||||
* Fri Nov 24 2023 Rich Mattes <richmattes@gmail.com> - 5.2.5-1
|
||||
- Add check section and fix ctest configuration
|
||||
|
||||
* Thu Oct 26 2023 Benjamin A. Beasley <code@musicinmybrain.net> - 5.2.5-1
|
||||
- Ensure stb_image contains the latest CVE patches
|
||||
|
||||
* Fri Jul 28 2023 Scott K Logan <logans@cottsay.net> - 5.2.5-1
|
||||
- Update to release 5.2.5
|
||||
|
||||
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.1-12
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 5.0.1-11
|
||||
- Rebuilt for Python 3.12
|
||||
|
||||
* Wed Jan 18 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.1-10
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.1-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 5.0.1-8
|
||||
- Rebuilt for Python 3.11
|
||||
|
||||
* Sat Apr 23 2022 Benjamin A. Beasley <code@musicinmybrain.net> - 5.0.1-7
|
||||
- Security fix for CVE-2022-28041
|
||||
- Drop dependency on pkgconfig(zzip-zlib-config), no longer available in
|
||||
zziplib; use zlib directly instead
|
||||
|
||||
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.0.1-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Thu Dec 30 2021 Rich Mattes <richmattes@gmail.com> - 5.0.1-5
|
||||
- Correct Unlicense shortname (rhbz#2036000)
|
||||
|
||||
* Sat Sep 11 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 5.0.1-4
|
||||
- Unbundle stb_image
|
||||
- Add -static BR’s for header-only libraries utf8cpp and rapidjson
|
||||
|
||||
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-30
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 3.3.1-29
|
||||
- Rebuilt for Python 3.10
|
||||
|
||||
* Mon Mar 29 2021 Rich Mattes <richmattes@gmail.com> - 5.0.1-3
|
||||
- Fix library install dir specification (rhbz#1943862)
|
||||
- Remove un-needed build dependency on ILUT
|
||||
|
||||
* Tue Mar 23 2021 Scott K Logan <logans@cottsay.net> - 5.0.1-2
|
||||
- Add an upstream patch to fix imported library locations
|
||||
|
||||
* Sat Feb 27 2021 Rich Mattes <richmattes@gmail.com> - 5.0.1-1
|
||||
- Update to release 5.0.1
|
||||
|
||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-28
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Tue Aug 18 2020 Jeff Law <law@redhat.com> - 3.3.1-27
|
||||
- Fix minor C++17 issues
|
||||
|
||||
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-26
|
||||
- Second attempt - Rebuilt for
|
||||
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-25
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-24
|
||||
- Rebuilt for Python 3.9
|
||||
|
||||
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-23
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-22
|
||||
- Rebuilt for Python 3.8.0rc1 (#1748018)
|
||||
|
||||
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-21
|
||||
- Rebuilt for Python 3.8
|
||||
|
||||
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-20
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-19
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Mon Jan 14 2019 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-18
|
||||
- Subpackage python2-assimp has been removed
|
||||
See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal
|
||||
|
||||
* Tue Aug 28 2018 Patrik Novotný <panovotn@redhat.com> - 3.3.1-17
|
||||
- update requires to minizip-compat(-devel), rhbz#1609830, rhbz#1615381
|
||||
|
||||
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-16
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Mon Jul 02 2018 Miro Hrončok <mhroncok@redhat.com> - 3.3.1-15
|
||||
- Rebuilt for Python 3.7
|
||||
|
||||
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.3.1-14
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Mon Oct 02 2017 Troy Dawson <tdawson@redhat.com> - 3.3.1-13
|
||||
- Cleanup spec file conditionals
|
||||
|
||||
* Sun Aug 06 2017 Björn Esser <besser82@fedoraproject.org> - 3.3.1-12
|
||||
- Rebuilt for AutoReq cmake-filesystem
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,23 @@
|
|||
#!/bin/bash
|
||||
RELEASE=3.3.1
|
||||
git clone -b v${RELEASE} --depth=1 https://github.com/assimp/assimp.git assimp-${RELEASE}
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 version"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd assimp-${RELEASE}
|
||||
git checkout -b free
|
||||
RELEASE=$1
|
||||
|
||||
if [ ! -f assimp-$RELEASE.tar.gz ]; then
|
||||
wget https://github.com/assimp/assimp/archive/v$RELEASE/assimp-$RELEASE.tar.gz
|
||||
fi
|
||||
|
||||
if [ -d assimp-$RELEASE ]; then
|
||||
rm -fr assimp-$RELEASE
|
||||
fi
|
||||
|
||||
tar xvf assimp-$RELEASE.tar.gz
|
||||
cd assimp-$RELEASE
|
||||
find ./ -name "*.dll" -exec git rm -r {} \;
|
||||
git rm -rf test/models-nonbsd
|
||||
git commit -m "- Remove non free bits."
|
||||
git archive --prefix=assimp-${RELEASE}/ free | xz > ../assimp-${RELEASE}-free.tar.xz
|
||||
rm -r test/models-nonbsd
|
||||
cd ..
|
||||
|
||||
tar czf assimp-$RELEASE-free.tar.xz assimp-$RELEASE
|
||||
|
|
|
|||
30
dd98d4aea3d9d2b3544540ea44eeb15c3616dbb7.patch
Normal file
30
dd98d4aea3d9d2b3544540ea44eeb15c3616dbb7.patch
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
diff -rupN --no-dereference assimp-6.0.2/port/PyAssimp/pyassimp/postprocess.py assimp-6.0.2-new/port/PyAssimp/pyassimp/postprocess.py
|
||||
--- assimp-6.0.2/port/PyAssimp/pyassimp/postprocess.py 2025-06-08 21:50:39.000000000 +0200
|
||||
+++ assimp-6.0.2-new/port/PyAssimp/pyassimp/postprocess.py 2025-12-27 19:11:08.846657557 +0100
|
||||
@@ -36,13 +36,21 @@ aiProcess_JoinIdenticalVertices = 0x2
|
||||
#
|
||||
aiProcess_MakeLeftHanded = 0x4
|
||||
|
||||
-## <hr>Triangulates all faces of all meshes.
|
||||
+## <hr>Triangulates all faces of all meshes.
|
||||
#
|
||||
# By default the imported mesh data might contain faces with more than 3
|
||||
-# indices. For rendering you'll usually want all faces to be triangles.
|
||||
-# This post processing stepaiProcess_ForceGenNormals
|
||||
-## <hr>Removes some parts of the data structure (animations, materials,
|
||||
-# light sources, cameras, textures, vertex components).
|
||||
+# indices. For rendering you'll usually want all faces to be triangles.
|
||||
+# This post processing step splits up faces with more than 3 indices into
|
||||
+# triangles. Line and point primitives are *not* modified! If you want
|
||||
+# 'triangles only' with no other kinds of primitives, try the following
|
||||
+# solution:
|
||||
+# - Specify both #aiProcess_Triangulate and #aiProcess_SortByPType
|
||||
+# - Ignore all point and line meshes when you process assimp's output
|
||||
+#
|
||||
+aiProcess_Triangulate = 0x8
|
||||
+
|
||||
+# <hr>Removes some parts of the data structure (animations, materials,
|
||||
+# light sources, cameras, textures, vertex components).
|
||||
#
|
||||
# The components to be removed are specified in a separate
|
||||
# configuration option, <tt>#AI_CONFIG_PP_RVC_FLAGS<tt>. This is quite useful
|
||||
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (assimp-3.3.1-free.tar.xz) = 249e7e35a357274d296a457ab6ffff5a06480007db7f327d72869448e5f754740487a8def5ed1e1f2324a68aa5a9c2780092cded3d56d685103974bb32e7d761
|
||||
SHA512 (assimp-6.0.2-free.tar.xz) = c2895d1185d13fdbd25499e6d916d960f124892de7363e9e91db3ed1daef554ebea462e37cbfafbe5be548e5a962f18fc9f213f836579d97e725c17aae58149b
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue