diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cbbfef2c..ab4d45e88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,6 +150,21 @@ IF (WIN32) # Multibyte character set is deprecated since at least MSVC2015 (possibly earlier) ADD_DEFINITIONS( -DUNICODE -D_UNICODE ) ENDIF() + + # Link statically against c/c++ lib to avoid missing redistriburable such as + # "VCRUNTIME140.dll not found. Try reinstalling the app.", but give users + # a choice to opt for the shared runtime if they want. + option(USE_STATIC_CRT "Link against the static runtime libraries." OFF) + + # The CMAKE_CXX_FLAGS vars can be overriden by some Visual Studio generators, so we use an alternative + # global method here: + if (${USE_STATIC_CRT}) + add_compile_options( + $<$:/MT> + $<$:/MTd> + $<$:/MT> + ) + endif() ENDIF() ENDIF() diff --git a/code/AssetLib/FBX/FBXConverter.cpp b/code/AssetLib/FBX/FBXConverter.cpp index 32872108b..d446fd2e9 100644 --- a/code/AssetLib/FBX/FBXConverter.cpp +++ b/code/AssetLib/FBX/FBXConverter.cpp @@ -2161,6 +2161,9 @@ void FBXConverter::SetShadingPropertiesCommon(aiMaterial *out_mat, const Propert const float ShininessExponent = PropertyGet(props, "ShininessExponent", ok); if (ok) { out_mat->AddProperty(&ShininessExponent, 1, AI_MATKEY_SHININESS); + // Match Blender behavior to extract roughness when only shininess is present + const float roughness = 1.0 - (sqrt(ShininessExponent) / 10.0); + out_mat->AddProperty(&roughness, 1, AI_MATKEY_ROUGHNESS_FACTOR); } // TransparentColor / TransparencyFactor... gee thanks FBX :rolleyes: diff --git a/code/AssetLib/IFC/IFCOpenings.cpp b/code/AssetLib/IFC/IFCOpenings.cpp index 74200195b..6b8b565c2 100644 --- a/code/AssetLib/IFC/IFCOpenings.cpp +++ b/code/AssetLib/IFC/IFCOpenings.cpp @@ -1476,7 +1476,7 @@ std::vector GetContourInPlane2D(std::shared_ptr mesh,IfcMa return contour; } -const float close{ ai_epsilon }; +const ai_real close{ ai_epsilon }; static bool isClose(IfcVector2 first,IfcVector2 second) { auto diff = (second - first); diff --git a/code/AssetLib/MDL/MDLLoader.cpp b/code/AssetLib/MDL/MDLLoader.cpp index 1e90c8e71..9c9cf910c 100644 --- a/code/AssetLib/MDL/MDLLoader.cpp +++ b/code/AssetLib/MDL/MDLLoader.cpp @@ -857,6 +857,9 @@ void MDLImporter::CalculateUVCoordinates_MDL5() { const float fHeight = (float)iHeight; aiMesh *pcMesh = this->pScene->mMeshes[0]; for (unsigned int i = 0; i < pcMesh->mNumVertices; ++i) { + if (!pcMesh->HasTextureCoords(0)) { + continue; + } pcMesh->mTextureCoords[0][i].x /= fWidth; pcMesh->mTextureCoords[0][i].y /= fHeight; pcMesh->mTextureCoords[0][i].y = 1.0f - pcMesh->mTextureCoords[0][i].y; // DX to OGL diff --git a/code/AssetLib/MDL/MDLMaterialLoader.cpp b/code/AssetLib/MDL/MDLMaterialLoader.cpp index eebb9d15e..2de43d241 100644 --- a/code/AssetLib/MDL/MDLMaterialLoader.cpp +++ b/code/AssetLib/MDL/MDLMaterialLoader.cpp @@ -493,7 +493,7 @@ void MDLImporter::ParseSkinLump_3DGS_MDL7( size_t iLen2 = iLen + 1; iLen2 = iLen2 > MAXLEN ? MAXLEN : iLen2; memcpy(szFile.data, (const char *)szCurrent, iLen2); - szFile.length = (ai_uint32)iLen; + szFile.length = static_cast(iLen2); szCurrent += iLen2; diff --git a/code/AssetLib/Obj/ObjFileParser.cpp b/code/AssetLib/Obj/ObjFileParser.cpp index 1786c0d9f..4e50d5dae 100644 --- a/code/AssetLib/Obj/ObjFileParser.cpp +++ b/code/AssetLib/Obj/ObjFileParser.cpp @@ -55,7 +55,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { -constexpr char ObjFileParser::DEFAULT_MATERIAL[]; +constexpr const char ObjFileParser::DEFAULT_MATERIAL[]; ObjFileParser::ObjFileParser() : m_DataIt(), diff --git a/code/AssetLib/Obj/ObjFileParser.h b/code/AssetLib/Obj/ObjFileParser.h index fbd2f2c89..1bf11a0c8 100644 --- a/code/AssetLib/Obj/ObjFileParser.h +++ b/code/AssetLib/Obj/ObjFileParser.h @@ -141,7 +141,7 @@ private: // because the class contains pointer to allocated memory /// Default material name - static constexpr char DEFAULT_MATERIAL[] = AI_DEFAULT_MATERIAL_NAME; + static constexpr const char DEFAULT_MATERIAL[] = AI_DEFAULT_MATERIAL_NAME; //! Iterator to current position in buffer DataArrayIt m_DataIt; //! Iterator to end position of buffer diff --git a/code/AssetLib/glTF/glTFAsset.inl b/code/AssetLib/glTF/glTFAsset.inl index 2b76a30ab..1f4544156 100644 --- a/code/AssetLib/glTF/glTFAsset.inl +++ b/code/AssetLib/glTF/glTFAsset.inl @@ -53,9 +53,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #endif using namespace Assimp; -using namespace glTFCommon; namespace glTF { +using namespace glTFCommon; #if _MSC_VER #pragma warning(push) diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index ec481a729..db47915d6 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -82,9 +82,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // clang-format on using namespace Assimp; -using namespace glTFCommon; namespace glTF2 { +using glTFCommon::FindStringInContext; +using glTFCommon::FindNumberInContext; +using glTFCommon::FindUIntInContext; +using glTFCommon::FindArrayInContext; +using glTFCommon::FindObjectInContext; +using glTFCommon::FindExtensionInContext; +using glTFCommon::MemberOrDefault; +using glTFCommon::ReadMember; +using glTFCommon::FindMember; +using glTFCommon::FindObject; +using glTFCommon::FindUInt; +using glTFCommon::FindArray; +using glTFCommon::FindArray; namespace { @@ -179,11 +191,11 @@ inline bool GetAttribVector(Mesh::Primitive &p, const char *attr, Mesh::Accessor v = &(p.attributes.texcoord); } else if ((pos = Compare(attr, "COLOR"))) { v = &(p.attributes.color); - } else if ((pos = Compare(attr, "JOINT"))) { + } else if ((pos = Compare(attr, "JOINTS"))) { v = &(p.attributes.joint); } else if ((pos = Compare(attr, "JOINTMATRIX"))) { v = &(p.attributes.jointmatrix); - } else if ((pos = Compare(attr, "WEIGHT"))) { + } else if ((pos = Compare(attr, "WEIGHTS"))) { v = &(p.attributes.weight); } else return false; diff --git a/include/assimp/Bitmap.h b/include/assimp/Bitmap.h index 6a614f7cf..94dd0b81b 100644 --- a/include/assimp/Bitmap.h +++ b/include/assimp/Bitmap.h @@ -78,11 +78,11 @@ protected: // We define the struct size because sizeof(Header) might return a wrong result because of structure padding. static constexpr std::size_t header_size = - sizeof(type) + - sizeof(size) + - sizeof(reserved1) + - sizeof(reserved2) + - sizeof(offset); + sizeof(uint16_t) + + sizeof(uint32_t) + + sizeof(uint16_t) + + sizeof(uint16_t) + + sizeof(uint32_t); }; struct DIB { @@ -100,17 +100,17 @@ protected: // We define the struct size because sizeof(DIB) might return a wrong result because of structure padding. static constexpr std::size_t dib_size = - sizeof(size) + - sizeof(width) + - sizeof(height) + - sizeof(planes) + - sizeof(bits_per_pixel) + - sizeof(compression) + - sizeof(image_size) + - sizeof(x_resolution) + - sizeof(y_resolution) + - sizeof(nb_colors) + - sizeof(nb_important_colors); + sizeof(uint32_t) + + sizeof(int32_t) + + sizeof(int32_t) + + sizeof(uint16_t) + + sizeof(uint16_t) + + sizeof(uint32_t) + + sizeof(uint32_t) + + sizeof(int32_t) + + sizeof(int32_t) + + sizeof(uint32_t) + + sizeof(uint32_t); }; static constexpr std::size_t mBytesPerPixel = 4; diff --git a/include/assimp/material.inl b/include/assimp/material.inl index 0b30a6839..cdf272201 100644 --- a/include/assimp/material.inl +++ b/include/assimp/material.inl @@ -157,7 +157,7 @@ AI_FORCE_INLINE case aiPTI_Float: case aiPTI_Double: { // Read as float and cast to bool - float value = 0.0f; + ai_real value = 0.0f; if (AI_SUCCESS == ::aiGetMaterialFloat(this, pKey, type, idx, &value)) { pOut = static_cast(value); return AI_SUCCESS;