From 7781fe5781dd8de2632192df17c7d31898bf8947 Mon Sep 17 00:00:00 2001 From: #Momo <40578274+MomoDeve@users.noreply.github.com> Date: Wed, 21 Oct 2020 23:21:50 +0300 Subject: [PATCH 1/2] MSVC crash workaround I do not know why, but the following line causes crash if assimp was compiled using MSVC with RelWithDebInfo configuration: `std::transform(shading.begin(), shading.end(), shading.begin(), Assimp::ToLower);` replacing `shading.begin()` with `shading.data()` fixes this issue. --- code/AssetLib/FBX/FBXMaterial.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/FBX/FBXMaterial.cpp b/code/AssetLib/FBX/FBXMaterial.cpp index 9679e62a5..6296b2a56 100644 --- a/code/AssetLib/FBX/FBXMaterial.cpp +++ b/code/AssetLib/FBX/FBXMaterial.cpp @@ -86,7 +86,7 @@ Material::Material(uint64_t id, const Element& element, const Document& doc, con std::string templateName; // lower-case shading because Blender (for example) writes "Phong" - std::transform(shading.begin(), shading.end(), shading.begin(), Assimp::ToLower); + std::transform(shading.data(), shading.data() + shading.size(), shading.data(), Assimp::ToLower); if(shading == "phong") { templateName = "Material.FbxSurfacePhong"; } From b168d8f441e71e110f0e2c00202ccaf76851a1d9 Mon Sep 17 00:00:00 2001 From: #Momo <40578274+MomoDeve@users.noreply.github.com> Date: Wed, 21 Oct 2020 23:41:33 +0300 Subject: [PATCH 2/2] replaced data with taking address of first element oops, seems like `data()` returns `char*` only since C++17. Replaced with taking address of first string element --- code/AssetLib/FBX/FBXMaterial.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/FBX/FBXMaterial.cpp b/code/AssetLib/FBX/FBXMaterial.cpp index 6296b2a56..9fe4ce5be 100644 --- a/code/AssetLib/FBX/FBXMaterial.cpp +++ b/code/AssetLib/FBX/FBXMaterial.cpp @@ -86,7 +86,7 @@ Material::Material(uint64_t id, const Element& element, const Document& doc, con std::string templateName; // lower-case shading because Blender (for example) writes "Phong" - std::transform(shading.data(), shading.data() + shading.size(), shading.data(), Assimp::ToLower); + std::transform(shading.data(), shading.data() + shading.size(), std::addressof(shading[0]), Assimp::ToLower); if(shading == "phong") { templateName = "Material.FbxSurfacePhong"; }