assimp: update to 5.2.3

This commit is contained in:
مهدي شينون (Mehdi Chinoune)
2022-03-22 08:30:56 +01:00
committed by GitHub
parent 900801fcab
commit dde0bf2436
2 changed files with 5 additions and 273 deletions

View File

@@ -1,265 +0,0 @@
From 2fdf52488fba296beae885b4b6e983de375a8236 Mon Sep 17 00:00:00 2001
From: RichardTea <31507749+RichardTea@users.noreply.github.com>
Date: Tue, 23 Nov 2021 13:53:58 +0000
Subject: [PATCH 1/3] float and integer material property bool conversion
All reading float and integer material property values as bool
Zero => False
Non-Zero => True
---
include/assimp/material.inl | 41 +++++++++++++++++++++
test/unit/utMaterialSystem.cpp | 65 ++++++++++++++++++++++++++++++----
2 files changed, 100 insertions(+), 6 deletions(-)
diff --git a/include/assimp/material.inl b/include/assimp/material.inl
index 693785c3c0..1aec6d8650 100644
--- a/include/assimp/material.inl
+++ b/include/assimp/material.inl
@@ -137,6 +137,47 @@ aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
return ret;
}
+// ---------------------------------------------------------------------------
+// Specialisation for a single bool.
+// Casts floating point and integer to bool
+template <>
+AI_FORCE_INLINE
+ aiReturn
+ aiMaterial::Get(const char *pKey, unsigned int type,
+ unsigned int idx, bool &pOut) const {
+ const aiMaterialProperty *prop;
+ const aiReturn ret = ::aiGetMaterialProperty(this, pKey, type, idx,
+ (const aiMaterialProperty **)&prop);
+ if (AI_SUCCESS == ret) {
+
+ switch (prop->mType) {
+ // Type cannot be converted
+ default: return AI_FAILURE;
+
+ case aiPTI_Buffer: {
+ // Native bool value storage
+ if (prop->mDataLength < sizeof(bool)) {
+ return AI_FAILURE;
+ }
+ ::memcpy(&pOut, prop->mData, sizeof(bool));
+ } break;
+
+ case aiPTI_Float:
+ case aiPTI_Double:
+ case aiPTI_Integer: {
+ // Read as integer and cast to bool
+ int value = 0;
+ if (AI_SUCCESS == ::aiGetMaterialInteger(this, pKey, type, idx, &value)) {
+ pOut = static_cast<bool>(value);
+ return AI_SUCCESS;
+ }
+ return AI_FAILURE;
+ }
+ }
+ }
+ return ret;
+}
+
// ---------------------------------------------------------------------------
AI_FORCE_INLINE
aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
diff --git a/test/unit/utMaterialSystem.cpp b/test/unit/utMaterialSystem.cpp
index 8db014d9c4..9df64ae3ba 100644
--- a/test/unit/utMaterialSystem.cpp
+++ b/test/unit/utMaterialSystem.cpp
@@ -125,13 +125,66 @@ TEST_F(MaterialSystemTest, testStringProperty) {
}
// ------------------------------------------------------------------------------------------------
-TEST_F(MaterialSystemTest, testMaterialNameAccess) {
- aiMaterial *mat = new aiMaterial();
- EXPECT_NE(nullptr, mat);
-
- aiString name = mat->GetName();
+TEST_F(MaterialSystemTest, testDefaultMaterialName) {
+ aiString name = pcMat->GetName();
const int retValue(strncmp(name.C_Str(), AI_DEFAULT_MATERIAL_NAME, name.length));
EXPECT_EQ(0, retValue);
+}
+
+// ------------------------------------------------------------------------------------------------
+TEST_F(MaterialSystemTest, testBoolProperty) {
+ const bool valTrue = true;
+ const bool valFalse = false;
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&valTrue, 1, "bool_true"));
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&valFalse, 1, "bool_false"));
+
+ bool read = false;
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("bool_true", 0, 0, read));
+ EXPECT_TRUE(read) << "read true bool";
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("bool_false", 0, 0, read));
+ EXPECT_FALSE(read) << "read false bool";
+}
- delete mat;
+// ------------------------------------------------------------------------------------------------
+TEST_F(MaterialSystemTest, testCastIntProperty) {
+ int value = 10;
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "integer"));
+ value = 0;
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "zero"));
+
+ // To float
+ float valFloat = 0.0f;
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("integer", 0, 0, valFloat));
+ EXPECT_EQ(10.0f, valFloat);
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valFloat));
+ EXPECT_EQ(0.0f, valFloat);
+
+ // To bool
+ bool valBool = false;
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("integer", 0, 0, valBool));
+ EXPECT_EQ(true, valBool);
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valBool));
+ EXPECT_EQ(false, valBool);
+}
+
+// ------------------------------------------------------------------------------------------------
+TEST_F(MaterialSystemTest, testCastFloatProperty) {
+ float value = 150392.63f;
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "float"));
+ value = 0;
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "zero"));
+
+ // To int
+ int valInt = 0.0f;
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("float", 0, 0, valInt));
+ EXPECT_EQ(150392, valInt);
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valInt));
+ EXPECT_EQ(0, valInt);
+
+ // To bool
+ bool valBool = false;
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("float", 0, 0, valBool));
+ EXPECT_EQ(true, valBool);
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valBool));
+ EXPECT_EQ(false, valBool);
}
From 5143044cc84decd933bebd0a48b2c24e816b074a Mon Sep 17 00:00:00 2001
From: RichardTea <31507749+RichardTea@users.noreply.github.com>
Date: Tue, 23 Nov 2021 13:55:27 +0000
Subject: [PATCH 2/3] redefine AI_MATKEY_GLTF_PBRSPECULARGLOSSINESS
This key is deprecated but is used by Qt5 & Qt 6.2.1 QtQuick3D
---
include/assimp/pbrmaterial.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/assimp/pbrmaterial.h b/include/assimp/pbrmaterial.h
index b642a96e39..2103a31f07 100644
--- a/include/assimp/pbrmaterial.h
+++ b/include/assimp/pbrmaterial.h
@@ -61,7 +61,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_METALLIC_FACTOR AI_MATKEY_METALLIC_FACTOR
#define AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_ROUGHNESS_FACTOR AI_MATKEY_ROUGHNESS_FACTOR
-//#define AI_MATKEY_GLTF_PBRSPECULARGLOSSINESS "$mat.gltf.pbrSpecularGlossiness", 0, 0
+#define AI_MATKEY_GLTF_PBRSPECULARGLOSSINESS AI_MATKEY_GLOSSINESS_FACTOR
#define AI_MATKEY_GLTF_PBRSPECULARGLOSSINESS_GLOSSINESS_FACTOR AI_MATKEY_GLOSSINESS_FACTOR
// Use AI_MATKEY_SHADING_MODEL == aiShadingMode_Unlit instead
From d18709b899de50f18d9d6ae7cb85f4233a715179 Mon Sep 17 00:00:00 2001
From: RichardTea <31507749+RichardTea@users.noreply.github.com>
Date: Tue, 23 Nov 2021 14:15:32 +0000
Subject: [PATCH 3/3] Small float values should be true
---
include/assimp/material.inl | 15 ++++++++++-----
test/unit/utMaterialSystem.cpp | 28 ++++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/include/assimp/material.inl b/include/assimp/material.inl
index 1aec6d8650..b299892b0b 100644
--- a/include/assimp/material.inl
+++ b/include/assimp/material.inl
@@ -163,16 +163,21 @@ AI_FORCE_INLINE
} break;
case aiPTI_Float:
- case aiPTI_Double:
- case aiPTI_Integer: {
- // Read as integer and cast to bool
- int value = 0;
- if (AI_SUCCESS == ::aiGetMaterialInteger(this, pKey, type, idx, &value)) {
+ case aiPTI_Double: {
+ // Read as float and cast to bool
+ float value = 0.0f;
+ if (AI_SUCCESS == ::aiGetMaterialFloat(this, pKey, type, idx, &value)) {
pOut = static_cast<bool>(value);
return AI_SUCCESS;
}
return AI_FAILURE;
}
+ case aiPTI_Integer: {
+ // Cast to bool
+ const int value = static_cast<int>(*prop->mData);
+ pOut = static_cast<bool>(value);
+ return AI_SUCCESS;
+ }
}
}
return ret;
diff --git a/test/unit/utMaterialSystem.cpp b/test/unit/utMaterialSystem.cpp
index 9df64ae3ba..363a4b1934 100644
--- a/test/unit/utMaterialSystem.cpp
+++ b/test/unit/utMaterialSystem.cpp
@@ -151,6 +151,8 @@ TEST_F(MaterialSystemTest, testCastIntProperty) {
EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "integer"));
value = 0;
EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "zero"));
+ value = -1;
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "negative"));
// To float
float valFloat = 0.0f;
@@ -158,6 +160,8 @@ TEST_F(MaterialSystemTest, testCastIntProperty) {
EXPECT_EQ(10.0f, valFloat);
EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valFloat));
EXPECT_EQ(0.0f, valFloat);
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("negative", 0, 0, valFloat));
+ EXPECT_EQ(-1.0f, valFloat);
// To bool
bool valBool = false;
@@ -165,6 +169,8 @@ TEST_F(MaterialSystemTest, testCastIntProperty) {
EXPECT_EQ(true, valBool);
EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valBool));
EXPECT_EQ(false, valBool);
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("negative", 0, 0, valBool));
+ EXPECT_EQ(true, valBool);
}
// ------------------------------------------------------------------------------------------------
@@ -188,3 +194,25 @@ TEST_F(MaterialSystemTest, testCastFloatProperty) {
EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valBool));
EXPECT_EQ(false, valBool);
}
+
+// ------------------------------------------------------------------------------------------------
+TEST_F(MaterialSystemTest, testCastSmallFloatProperty) {
+ float value = 0.0078125f;
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "float"));
+ value = 0;
+ EXPECT_EQ(AI_SUCCESS, pcMat->AddProperty(&value, 1, "zero"));
+
+ // To int
+ int valInt = 0.0f;
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("float", 0, 0, valInt));
+ EXPECT_EQ(0, valInt);
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valInt));
+ EXPECT_EQ(0, valInt);
+
+ // To bool
+ bool valBool = false;
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("float", 0, 0, valBool));
+ EXPECT_EQ(true, valBool);
+ EXPECT_EQ(AI_SUCCESS, pcMat->Get("zero", 0, 0, valBool));
+ EXPECT_EQ(false, valBool);
+}

View File

@@ -3,8 +3,8 @@
_realname=assimp
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=5.2.2
pkgrel=2
pkgver=5.2.3
pkgrel=1
pkgdesc="Portable Open Source library to import various well-known 3D model formats in an uniform manner (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
@@ -20,21 +20,18 @@ source=(${_realname}-${pkgver}.tar.gz::https://github.com/assimp/assimp/archive/
001-fix-assimp_cmd-rc-file.patch
002-llvm-rc-workaround.patch
003-disable-werror.patch
004-soversion-with-clang.patch
005-restore-deprecated-macros.patch)
004-soversion-with-clang.patch)
options=('staticlibs')
sha256sums=('ad76c5d86c380af65a9d9f64e8fc57af692ffd80a90f613dfc6bd945d0b80bb4'
sha256sums=('b20fc41af171f6d8f1f45d4621f18e6934ab7264e71c37cd72fd9832509af2a8'
'9f12e8760b24e45fa5d308d6d80a65eebe7f499c283e8b54f0d8bb3dab95c5ae'
'3bdb6483fda22db9126991380a01220785e2e1d3ac1be7e4694096e5f69bcdfd'
'35f08302caedff9822f7399ef10521b8128d291bb07ffdf8195201005ca387b0'
'6bd125c59bcf663c0f23d19796ec99a6af01392309936aeb67e9e2169512bc5d'
'a227714a215023184536e38b4bc7f8341f635e16bfb3b0ea029d420c29aacd2d')
'6bd125c59bcf663c0f23d19796ec99a6af01392309936aeb67e9e2169512bc5d')
prepare() {
cd ${_realname}-${pkgver}
patch -p1 -i ${srcdir}/001-fix-assimp_cmd-rc-file.patch
patch -p1 -i ${srcdir}/003-disable-werror.patch
patch -p1 -i ${srcdir}/005-restore-deprecated-macros.patch
if [[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]]; then
patch -p1 -i "${srcdir}/002-llvm-rc-workaround.patch"