From 852ea8325cebf84ff1fefc9da60af1739070acf3 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 3 Nov 2022 23:11:21 +0200 Subject: [PATCH 1/9] Added support for KHR_materials_emissive_strength according to spec https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_emissive_strength --- code/AssetLib/glTF2/glTF2Asset.h | 13 +++++++++++++ code/AssetLib/glTF2/glTF2Asset.inl | 16 ++++++++++++++++ code/AssetLib/glTF2/glTF2AssetWriter.h | 1 + code/AssetLib/glTF2/glTF2AssetWriter.inl | 18 ++++++++++++++++++ code/AssetLib/glTF2/glTF2Exporter.cpp | 10 ++++++++++ code/AssetLib/glTF2/glTF2Exporter.h | 2 ++ code/AssetLib/glTF2/glTF2Importer.cpp | 7 +++++++ 7 files changed, 67 insertions(+) diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index 3becc4d9b..4349274d8 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -51,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * KHR_materials_transmission full * KHR_materials_volume full * KHR_materials_ior full + * KHR_materials_emissive_strength full */ #ifndef GLTF2ASSET_H_INC #define GLTF2ASSET_H_INC @@ -801,6 +802,13 @@ struct MaterialIOR { void SetDefaults(); }; +struct MaterialEmissiveStrength { + float emissiveStrength = 0.f; + + MaterialEmissiveStrength() { SetDefaults(); } + void SetDefaults(); +}; + //! The material appearance of a primitive. struct Material : public Object { //PBR metallic roughness properties @@ -833,6 +841,9 @@ struct Material : public Object { //extension: KHR_materials_ior Nullable materialIOR; + //extension: KHR_materials_emissive_strength + Nullable materialEmissiveStrength; + //extension: KHR_materials_unlit bool unlit; @@ -1106,6 +1117,7 @@ public: bool KHR_materials_transmission; bool KHR_materials_volume; bool KHR_materials_ior; + bool KHR_materials_emissive_strength; bool KHR_draco_mesh_compression; bool FB_ngon_encoding; bool KHR_texture_basisu; @@ -1120,6 +1132,7 @@ public: KHR_materials_transmission(false), KHR_materials_volume(false), KHR_materials_ior(false), + KHR_materials_emissive_strength(false), KHR_draco_mesh_compression(false), FB_ngon_encoding(false), KHR_texture_basisu(false) { diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index db47915d6..e13dd226e 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -1313,6 +1313,16 @@ inline void Material::Read(Value &material, Asset &r) { } } + if (r.extensionsUsed.KHR_materials_emissive_strength) { + if (Value *curMaterialEmissiveStrength = FindObject(*extensions, "KHR_materials_emissive_strength")) { + MaterialEmissiveStrength emissiveStrength; + + ReadMember(*curMaterialEmissiveStrength, "emissiveStrength", emissiveStrength.emissiveStrength); + + this->materialEmissiveStrength = Nullable(emissiveStrength); + } + } + unlit = nullptr != FindObject(*extensions, "KHR_materials_unlit"); } } @@ -1355,6 +1365,11 @@ inline void MaterialIOR::SetDefaults() { ior = 1.5f; } +inline void MaterialEmissiveStrength::SetDefaults() { + //KHR_materials_emissive_strength properties + emissiveStrength = 0.f; +} + inline void Mesh::Read(Value &pJSON_Object, Asset &pAsset_Root) { Value *curName = FindMember(pJSON_Object, "name"); if (nullptr != curName && curName->IsString()) { @@ -2026,6 +2041,7 @@ inline void Asset::ReadExtensionsUsed(Document &doc) { CHECK_EXT(KHR_materials_transmission); CHECK_EXT(KHR_materials_volume); CHECK_EXT(KHR_materials_ior); + CHECK_EXT(KHR_materials_emissive_strength); CHECK_EXT(KHR_draco_mesh_compression); CHECK_EXT(KHR_texture_basisu); diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.h b/code/AssetLib/glTF2/glTF2AssetWriter.h index 089a15844..ec216101c 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.h +++ b/code/AssetLib/glTF2/glTF2AssetWriter.h @@ -51,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * KHR_materials_transmission: full * KHR_materials_volume: full * KHR_materials_ior: full + * KHR_materials_emissive_strength: full */ #ifndef GLTF2ASSETWRITER_H_INC #define GLTF2ASSETWRITER_H_INC diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.inl b/code/AssetLib/glTF2/glTF2AssetWriter.inl index 0be139595..249c738cd 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.inl +++ b/code/AssetLib/glTF2/glTF2AssetWriter.inl @@ -511,6 +511,20 @@ namespace glTF2 { } } + if (m.materialEmissiveStrength.isPresent) { + Value materialEmissiveStrength(rapidjson::Type::kObjectType); + + MaterialEmissiveStrength &emissiveStrength = m.materialEmissiveStrength.value; + + if (emissiveStrength.emissiveStrength != 0.f) { + WriteFloat(materialEmissiveStrength, emissiveStrength.emissiveStrength, "emissiveStrength", w.mAl); + } + + if (!emissiveStrength.ObjectEmpty()) { + exts.AddMember("KHR_materials_emissive_strength", emissiveStrength, w.mAl); + } + } + if (!exts.ObjectEmpty()) { obj.AddMember("extensions", exts, w.mAl); } @@ -935,6 +949,10 @@ namespace glTF2 { exts.PushBack(StringRef("KHR_materials_ior"), mAl); } + if (this->mAsset.extensionsUsed.KHR_materials_emissive_strength) { + exts.PushBack(StringRef("KHR_materials_emissive_strength"), mAl); + } + if (this->mAsset.extensionsUsed.FB_ngon_encoding) { exts.PushBack(StringRef("FB_ngon_encoding"), mAl); } diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index 3bfe49fba..2954f9f53 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -733,6 +733,10 @@ bool glTF2Exporter::GetMatIOR(const aiMaterial &mat, glTF2::MaterialIOR &ior) { return mat.Get(AI_MATKEY_REFRACTI, ior.ior) == aiReturn_SUCCESS; } +bool glTF2Exporter::GetMatEmissiveStrength(const aiMaterial &mat, glTF2::MaterialEmissiveStrength &emissiveStrength) { + return mat.Get(AI_MATKEY_EMISSIVE_INTENSITY, emissiveStrength.emissiveStrength) == aiReturn_SUCCESS; +} + void glTF2Exporter::ExportMaterials() { aiString aiName; for (unsigned int i = 0; i < mScene->mNumMaterials; ++i) { @@ -862,6 +866,12 @@ void glTF2Exporter::ExportMaterials() { if (GetMatIOR(mat, ior)) { mAsset->extensionsUsed.KHR_materials_ior = true; m->materialIOR = Nullable(ior); + } + + MaterialEmissiveStrength emissiveStrength; + if (GetMatEmissiveStrength(mat, emissiveStrength)) { + mAsset->extensionsUsed.KHR_materials_emissive_strength = true; + m->materialEmissiveStrength = Nullable(emissiveStrength); } } } diff --git a/code/AssetLib/glTF2/glTF2Exporter.h b/code/AssetLib/glTF2/glTF2Exporter.h index 99425228e..505e331a2 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.h +++ b/code/AssetLib/glTF2/glTF2Exporter.h @@ -81,6 +81,7 @@ struct MaterialClearcoat; struct MaterialTransmission; struct MaterialVolume; struct MaterialIOR; +struct MaterialEmissiveStrength; // Vec/matrix types, as raw float arrays typedef float(vec2)[2]; @@ -121,6 +122,7 @@ protected: bool GetMatTransmission(const aiMaterial &mat, glTF2::MaterialTransmission &transmission); bool GetMatVolume(const aiMaterial &mat, glTF2::MaterialVolume &volume); bool GetMatIOR(const aiMaterial &mat, glTF2::MaterialIOR &ior); + bool GetMatEmissiveStrength(const aiMaterial &mat, glTF2::MaterialEmissiveStrength &emissiveStrength); void ExportMetadata(); void ExportMaterials(); void ExportMeshes(); diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 947edc8d5..7b0bf4b0b 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -357,6 +357,13 @@ static aiMaterial *ImportMaterial(std::vector &embeddedTexIdxs, Asset &r, M aimat->AddProperty(&ior.ior, 1, AI_MATKEY_REFRACTI); } + // KHR_materials_emissive_strength + if (mat.materialEmissiveStrength.isPresent) { + MaterialEmissiveStrength &emissiveStrength = mat.materialEmissiveStrength.value; + + aimat->AddProperty(&emissiveStrength.emissiveStrength, 1, AI_MATKEY_EMISSIVE_INTENSITY); + } + return aimat; } catch (...) { delete aimat; From 945d93b46a138048eac880d0d3de9313dfbcc387 Mon Sep 17 00:00:00 2001 From: Adam Beili Date: Fri, 4 Nov 2022 09:37:28 -0700 Subject: [PATCH 2/9] fixed indentation --- code/AssetLib/glTF2/glTF2Asset.h | 8 ++++---- code/AssetLib/glTF2/glTF2Asset.inl | 4 ++-- code/AssetLib/glTF2/glTF2AssetWriter.inl | 6 +++--- code/AssetLib/glTF2/glTF2Exporter.cpp | 4 ++-- code/AssetLib/glTF2/glTF2Exporter.h | 2 +- code/AssetLib/glTF2/glTF2Importer.cpp | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index 4349274d8..b9e19205d 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -840,8 +840,8 @@ struct Material : public Object { //extension: KHR_materials_ior Nullable materialIOR; - - //extension: KHR_materials_emissive_strength + + //extension: KHR_materials_emissive_strength Nullable materialEmissiveStrength; //extension: KHR_materials_unlit @@ -1117,7 +1117,7 @@ public: bool KHR_materials_transmission; bool KHR_materials_volume; bool KHR_materials_ior; - bool KHR_materials_emissive_strength; + bool KHR_materials_emissive_strength; bool KHR_draco_mesh_compression; bool FB_ngon_encoding; bool KHR_texture_basisu; @@ -1132,7 +1132,7 @@ public: KHR_materials_transmission(false), KHR_materials_volume(false), KHR_materials_ior(false), - KHR_materials_emissive_strength(false), + KHR_materials_emissive_strength(false), KHR_draco_mesh_compression(false), FB_ngon_encoding(false), KHR_texture_basisu(false) { diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index e13dd226e..bb4be88da 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -1313,7 +1313,7 @@ inline void Material::Read(Value &material, Asset &r) { } } - if (r.extensionsUsed.KHR_materials_emissive_strength) { + if (r.extensionsUsed.KHR_materials_emissive_strength) { if (Value *curMaterialEmissiveStrength = FindObject(*extensions, "KHR_materials_emissive_strength")) { MaterialEmissiveStrength emissiveStrength; @@ -2041,7 +2041,7 @@ inline void Asset::ReadExtensionsUsed(Document &doc) { CHECK_EXT(KHR_materials_transmission); CHECK_EXT(KHR_materials_volume); CHECK_EXT(KHR_materials_ior); - CHECK_EXT(KHR_materials_emissive_strength); + CHECK_EXT(KHR_materials_emissive_strength); CHECK_EXT(KHR_draco_mesh_compression); CHECK_EXT(KHR_texture_basisu); diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.inl b/code/AssetLib/glTF2/glTF2AssetWriter.inl index 249c738cd..6b776dee9 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.inl +++ b/code/AssetLib/glTF2/glTF2AssetWriter.inl @@ -511,7 +511,7 @@ namespace glTF2 { } } - if (m.materialEmissiveStrength.isPresent) { + if (m.materialEmissiveStrength.isPresent) { Value materialEmissiveStrength(rapidjson::Type::kObjectType); MaterialEmissiveStrength &emissiveStrength = m.materialEmissiveStrength.value; @@ -520,8 +520,8 @@ namespace glTF2 { WriteFloat(materialEmissiveStrength, emissiveStrength.emissiveStrength, "emissiveStrength", w.mAl); } - if (!emissiveStrength.ObjectEmpty()) { - exts.AddMember("KHR_materials_emissive_strength", emissiveStrength, w.mAl); + if (!materialEmissiveStrength.ObjectEmpty()) { + exts.AddMember("KHR_materials_emissive_strength", materialEmissiveStrength, w.mAl); } } diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index 2954f9f53..728249676 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -867,8 +867,8 @@ void glTF2Exporter::ExportMaterials() { mAsset->extensionsUsed.KHR_materials_ior = true; m->materialIOR = Nullable(ior); } - - MaterialEmissiveStrength emissiveStrength; + + MaterialEmissiveStrength emissiveStrength; if (GetMatEmissiveStrength(mat, emissiveStrength)) { mAsset->extensionsUsed.KHR_materials_emissive_strength = true; m->materialEmissiveStrength = Nullable(emissiveStrength); diff --git a/code/AssetLib/glTF2/glTF2Exporter.h b/code/AssetLib/glTF2/glTF2Exporter.h index 505e331a2..425180b14 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.h +++ b/code/AssetLib/glTF2/glTF2Exporter.h @@ -122,7 +122,7 @@ protected: bool GetMatTransmission(const aiMaterial &mat, glTF2::MaterialTransmission &transmission); bool GetMatVolume(const aiMaterial &mat, glTF2::MaterialVolume &volume); bool GetMatIOR(const aiMaterial &mat, glTF2::MaterialIOR &ior); - bool GetMatEmissiveStrength(const aiMaterial &mat, glTF2::MaterialEmissiveStrength &emissiveStrength); + bool GetMatEmissiveStrength(const aiMaterial &mat, glTF2::MaterialEmissiveStrength &emissiveStrength); void ExportMetadata(); void ExportMaterials(); void ExportMeshes(); diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 7b0bf4b0b..7d3a4b9fe 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -357,7 +357,7 @@ static aiMaterial *ImportMaterial(std::vector &embeddedTexIdxs, Asset &r, M aimat->AddProperty(&ior.ior, 1, AI_MATKEY_REFRACTI); } - // KHR_materials_emissive_strength + // KHR_materials_emissive_strength if (mat.materialEmissiveStrength.isPresent) { MaterialEmissiveStrength &emissiveStrength = mat.materialEmissiveStrength.value; From 95d98ec98beb89b2a77390994f2de2b733c85cb5 Mon Sep 17 00:00:00 2001 From: Adam Beili <54665621+Beilinson@users.noreply.github.com> Date: Tue, 8 Nov 2022 20:55:20 +0200 Subject: [PATCH 3/9] fixed indentation error --- code/AssetLib/glTF2/glTF2AssetWriter.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.inl b/code/AssetLib/glTF2/glTF2AssetWriter.inl index 6b776dee9..f09efc35d 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.inl +++ b/code/AssetLib/glTF2/glTF2AssetWriter.inl @@ -949,7 +949,7 @@ namespace glTF2 { exts.PushBack(StringRef("KHR_materials_ior"), mAl); } - if (this->mAsset.extensionsUsed.KHR_materials_emissive_strength) { + if (this->mAsset.extensionsUsed.KHR_materials_emissive_strength) { exts.PushBack(StringRef("KHR_materials_emissive_strength"), mAl); } From 3c51eafaf49f03d0250525b58932e07a8c815277 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 18 Nov 2022 11:39:51 +0100 Subject: [PATCH 4/9] Add missing headerh will be needed on Ubuntu - closes https://github.com/assimp/assimp/issues/4720 --- include/assimp/Hash.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/include/assimp/Hash.h b/include/assimp/Hash.h index 18bd270f5..188e98a94 100644 --- a/include/assimp/Hash.h +++ b/include/assimp/Hash.h @@ -47,6 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #endif #include +#include #include #include @@ -64,11 +65,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #undef get16bits #if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) -#define get16bits(d) (*((const uint16_t *) (d))) +# define get16bits(d) (*((const uint16_t *) (d))) #endif #if !defined (get16bits) -#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ +# define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ +(uint32_t)(((const uint8_t *)(d))[0]) ) #endif @@ -77,8 +78,8 @@ inline uint32_t SuperFastHash (const char * data, uint32_t len = 0, uint32_t has uint32_t tmp; int rem; - if (!data) return 0; - if (!len)len = (uint32_t)::strlen(data); + if (data == NULL) return 0; + if (len == 0)len = (uint32_t)::strlen(data); rem = len & 3; len >>= 2; From 08f2f0f82ff043606fa70c05775596ee6d287ba8 Mon Sep 17 00:00:00 2001 From: Jan Krassnigg Date: Fri, 18 Nov 2022 13:44:05 +0100 Subject: [PATCH 5/9] Don't hide out-of-memory during FBX import --- code/AssetLib/FBX/FBXDocument.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/AssetLib/FBX/FBXDocument.cpp b/code/AssetLib/FBX/FBXDocument.cpp index d5e17d3e6..957aa764f 100644 --- a/code/AssetLib/FBX/FBXDocument.cpp +++ b/code/AssetLib/FBX/FBXDocument.cpp @@ -199,6 +199,14 @@ const Object* LazyObject::Get(bool dieOnError) { object.reset(new AnimationCurveNode(id,element,name,doc)); } } + catch (std::bad_alloc&) { + // out-of-memory is unrecoverable and should always lead to a failure + + flags &= ~BEING_CONSTRUCTED; + flags |= FAILED_TO_CONSTRUCT; + + throw; + } catch(std::exception& ex) { flags &= ~BEING_CONSTRUCTED; flags |= FAILED_TO_CONSTRUCT; From 80449dd01485bd5e282075ee0e8965df092ce862 Mon Sep 17 00:00:00 2001 From: John Alexander Le Roux <94056103+CMDR-JohnAlex@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:51:21 -0500 Subject: [PATCH 6/9] Fixed some grammar and spelling mistakes --- Build.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Build.md b/Build.md index b83271aaa..957031b5f 100644 --- a/Build.md +++ b/Build.md @@ -27,7 +27,7 @@ pip install pyassimp ## Manual build instructions ### Install CMake -Asset-Importer-Lib can be build for a lot of different platforms. We are using cmake to generate the build environment for these via cmake. So you have to make sure that you have a working cmake-installation on your system. You can download it at https://cmake.org/ or for linux install it via +Asset-Importer-Lib can be built for a lot of different platforms. We are using cmake to generate the build environment for these via cmake. So you have to make sure that you have a working cmake-installation on your system. You can download it at https://cmake.org/ or for linux install it via ```bash sudo apt-get install cmake ``` @@ -46,12 +46,12 @@ cmake --build . ### Build instructions for Windows with Visual-Studio -First you have to install Visual-Studio on your windows-system. You can get the Community-Version for free here: https://visualstudio.microsoft.com/de/downloads/ +First, you have to install Visual-Studio on your windows-system. You can get the Community-Version for free here: https://visualstudio.microsoft.com/de/downloads/ To generate the build environment for your IDE open a command prompt, navigate to your repo and type: ```bash cmake CMakeLists.txt ``` -This will generate the project files for the visual studio. All dependencies used to build Asset-IMporter-Lib shall be part of the repo. If you want to use you own zlib.installation this is possible as well. Check the options for it. +This will generate the project files for the visual studio. All dependencies used to build Asset-Importer-Lib shall be part of the repo. If you want to use you own zlib installation this is possible as well. Check the options for it. ### Build instructions for Windows with UWP See @@ -63,9 +63,9 @@ Open a terminal and got to your repository. You can generate the makefiles and b cmake CMakeLists.txt make -j4 ``` -The option -j descripes the number of parallel processes for the build. In this case make will try to use 4 cores for the build. +The option -j describes the number of parallel processes for the build. In this case make will try to use 4 cores for the build. -If you want to use a IDE for linux you can try QTCreator for instance. +If you want to use an IDE for linux you can try QTCreator for instance. ### Build instructions for MinGW Older versions of MinGW's compiler (e.g. 5.1.0) do not support the -mbig_obj flag @@ -93,8 +93,8 @@ The cmake-build-environment provides options to configure the build. The followi - **ASSIMP_ANDROID_JNIIOSYSTEM (default OFF)**: Android JNI IOSystem support is active. - **ASSIMP_NO_EXPORT (default OFF)**: Disable Assimp's export functionality. - **ASSIMP_BUILD_ZLIB (default OFF)**: Build our own zlib. -- **ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all exporter senabled. -- **ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all importer senabled. +- **ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all exporters enabled. +- **ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all importers enabled. - **ASSIMP_BUILD_ASSIMP_TOOLS (default OFF)**: If the supplementary tools for Assimp are built in addition to the library. - **ASSIMP_BUILD_SAMPLES (default OFF)**: If the official samples are built as well (needs Glut). - **ASSIMP_BUILD_TESTS (default ON)**: If the test suite for Assimp is built in addition to the library. From 355ebbedf3f0b17ccfffac8e1cfa74137eb95c41 Mon Sep 17 00:00:00 2001 From: David Korczynski Date: Mon, 21 Nov 2022 16:45:38 -0800 Subject: [PATCH 7/9] Add CIFuzz GitHub action --- .github/workflows/cifuzz.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/cifuzz.yml diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml new file mode 100644 index 000000000..a84be8cbc --- /dev/null +++ b/.github/workflows/cifuzz.yml @@ -0,0 +1,26 @@ +name: CIFuzz +on: [pull_request] +jobs: + Fuzzing: + runs-on: ubuntu-latest + steps: + - name: Build Fuzzers + id: build + uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master + with: + oss-fuzz-project-name: 'assimp' + dry-run: false + language: c++ + - name: Run Fuzzers + uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master + with: + oss-fuzz-project-name: 'assimp' + fuzz-seconds: 300 + dry-run: false + language: c++ + - name: Upload Crash + uses: actions/upload-artifact@v3 + if: failure() && steps.build.outcome == 'success' + with: + name: artifacts + path: ./out/artifacts From 5689ac7869c146c32f10752d55ae268fbfba5437 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 22 Nov 2022 10:50:52 +0100 Subject: [PATCH 8/9] Add overfolow check for invalid data. - closes https://github.com/assimp/assimp/issues/3422 --- code/AssetLib/MDL/MDLLoader.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/MDL/MDLLoader.cpp b/code/AssetLib/MDL/MDLLoader.cpp index c0a63709b..0ae25580a 100644 --- a/code/AssetLib/MDL/MDLLoader.cpp +++ b/code/AssetLib/MDL/MDLLoader.cpp @@ -404,8 +404,13 @@ void MDLImporter::InternReadFile_Quake1() { this->CreateTextureARGB8_3DGS_MDL3(szCurrent + iNumImages * sizeof(float)); } // go to the end of the skin section / the beginning of the next skin - szCurrent += pcHeader->skinheight * pcHeader->skinwidth + - sizeof(float) * iNumImages; + bool overflow = false; + if ((pcHeader->skinheight > INT_MAX / pcHeader->skinwidth) || (pcHeader->skinwidth > INT_MAX / pcHeader->skinheight)){ + overflow = true; + } + if (!overflow) { + szCurrent += pcHeader->skinheight * pcHeader->skinwidth +sizeof(float) * iNumImages; + } } } else { szCurrent += sizeof(uint32_t); From 22cff318dcc085952db871553c35e9972d0b64f5 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 29 Nov 2022 09:34:56 +0100 Subject: [PATCH 9/9] Introduce --parallel instead of .j Just use parallel command to improve the readability. --- .github/workflows/ccpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 781cd7cb2..47914a3f2 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -115,7 +115,7 @@ jobs: cmakeListsOrSettingsJson: CMakeListsTxtAdvanced cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt' cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release ${{ steps.windows_extra_cmake_args.outputs.args }} ${{ steps.hunter_extra_cmake_args.outputs.args }}' - buildWithCMakeArgs: '-- -j 24 -v' + buildWithCMakeArgs: '--parallel 24 -v' buildDirectory: '${{ github.workspace }}/build/' - name: Exclude certain tests in Hunter specific builds